2017-08-04 84 views
-1

我正在对象(在这种情况下,汽车)根据自动移动到一个时间点是这样的:有没有更好的方法来使物体自动移动

public Image car1_right; 
    public int k; 
    public float i; 
    public float j; 

    void Start() 
    { 
     k = 1; 
     i = 0f; 
     j = 0f; 
     car1_right.enabled = false; 
    } 
    void Update() 
    { 
     if (TimeManager.gametimeDecimal == 9.0m && k == 1) 
     { 
      car1_right.enabled = true; 
      InvokeRepeating("car_move_1", 0f, 0.05f); 
      k = 2; 
     } 
     if (TimeManager.gametimeDecimal == 23.0m && k == 2) 
     { 
      k = 1; 
      i = 0f; 
      j = 0f; 
     } 
    } 
    void car_move_1() 
    { 
     car1_right.transform.localPosition = new Vector3(-35.0f + i, 531f - j, 0); 
     i += 1.8f; 
     j += 0.85f; 
    } 

问题是,增加更多的2汽车,我必须为每个(这将是6)创建3个更多的变量,并重复三次代码。

你知道更好的方法吗?

+0

你需要添加哪些变量?我在猜测'k','i'和'j'时是否正确? – Amy

+0

是的,你是对的。 –

+0

你能扩展你的代码吗?包括变量的声明?它看起来像是在课堂上宣布的。 – Amy

回答

1
public struct Position 
{    
    public double X { get; set; } 
    public double Y { get; set; } 
} 
public class Car 
{ 
    public bool IsEnabled { get; set; } 
    public Position Position { get; private set; } 
    public bool IsInMotion { get; set; } 
    public void MoveCar(Position position) 
    { 
     if (IsEnabled && !IsInMotion) 
     { 
      Position = position; 
     } 
    } 
} 

class CarSimulator 
{ 
    List<Car> cars = new List<Car>(); // populate it 
    void MoveAllCars() 
    { 
     foreach (var car in cars) 
     { 
      car.MoveCar(GetPosition()); 
     } 
    } 
} 

它可能看起来像这样。你会决定你需要执行什么逻辑。

+0

我很困惑,我不希望所有的汽车在同一时间,但根据时间条件移动。此外,他们需要继续前进,而不仅仅是一步,我需要使用Update()。 –

+0

好的,我已经改变了立场以避免让你困惑。 GetPosition()方法必须返回位置 - 您将决定该位置是什么。汽车何时移动?所有的汽车都停止移动吗? – Dido

相关问题