2014-02-09 42 views
-3

我想用一個計時器產生敵人並將它們從左向右移動,我該怎麼做?C#如何產生敵人並移動它們?

例子:

int count; 
timer (every 1 sec) 
{ 
    Enemy somename+count = new Enemy(); 
    count++; 
} 

timer (every 0.001 sec) 
{ 
    somename+count.x++; 
} 
+1

請不要使用虛假的代碼,除非你真的不知道自己在做什麼。你知道如何製作和使用計時器嗎?如果答案是肯定的,那麼請說出來,然後使用程序中的實時計時器代碼,這樣我們就不會有兩個問題可以回答問題了。 –

+0

我不建議你創造無限的敵人,因爲在移動你的遊戲一段時間後會開始減速。爲了避免這種事情,你應該限制敵人 –

回答

0

你的根本問題似乎缺乏一種方法來存儲您的所有敵人的引用。 Generics and collections爲這類問題提供瞭解決方案。我將使用List<T>,這是最基本的這種集合。然而,還有很多其他人都有自己的有用屬性。

考慮:

private class Enemy 
{ 
    public int position; 
} 

private List<Enemy> enemyList = new List<Enemy>(); 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    enemyList.Add(new Enemy()); 
} 

private void timer2_Tick(object sender, EventArgs e) 
{ 
    foreach(Enemy enemy in enemyList) 
    { 
     enemy.position++; 
    } 
} 

還要考慮更新可視對象的大名單每增加0.001第二個是無用和浪費。一毫秒更新對應於1000fps。沒有視頻設備會更新,沒有人能夠快速看到。通常,對於實時更新,您應該瞄準在30-60fps之間更新。這相當於不超過約0.016s(16ms)。

+0

謝謝你幫了我很多=) – user3289428

0

當您創建,本地範圍內的敵人,你不能訪問他們,一旦你走出循環。相反,有一個列表,並添加新產生的敵人到這個列表。 維護兩個線程來完成你的兩項任務。 1)線程 - 1將添加產卵敵人添加敵人到我們的列表。 2)線程-2會移動我們產生的列表中的敵人。 但是,因爲出列表是兩個線程之間的共享資源,所以總是使用'​​鎖'訪問列表。

+0

謝謝幫助了我很多。如果不會有人有更好的答案,我會標記你的答案最好=) – user3289428

+0

高興地幫助.. – Zeref

1

如果這是一個任務,並啓動它並運行。只需使用Timer類。 您不會像1000hz(1ms)那樣獲得高分辨率,儘管您希望移動。

Documentation: Timer class

 var timerCreate = new Timer {Interval = 1000}; 
     timerCreate.Tick += delegate(object o, EventArgs args) 
     { 
      // create them 
     }; 

     var timerAction = new Timer {Interval = 50}; 
     timerAction.Tick += delegate(object o, EventArgs args) 
     { 
      // move them    
     }; 
+0

謝謝,但我的問題,它是如何,我可以創造無限enemis和移動他們我感謝你的幫助=) – user3289428