2017-08-04 81 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

相關問題