我不確定你的問題,這似乎不是一個算法問題,更像編程建議。我有一個遊戲需要這個(對於怪物而不是汽車),這就是我所做的。它是一種.Net僞碼,但在其他環境中存在類似的東西。
如果你手動運行動畫,你基本上需要一個「遊戲循環」。
while (noinput):
timenow = getsystemtime();
timedelta = timenow - timeprevious;
update_object_positions(timedelta);
draw_stuff_to_screen();
timeprevious = timenow;
noinput = check_for_input()
的update_object_positions(timedelta)
一切移動沿着timedelta
,這是因爲這種循環上次執行多久。它會平淡地重繪每一次timedelta。如果您希望以恆定的速度運行,例如每20 mS一次,則可以使用thread.sleep(20-timedelta)
填充時間至20mS。
回到你的問題。我有一個車類,包括速度,車道,類型等,以及它的出現時間。我擁有數量有限的「汽車」,所以這些都是預先生成的。我把它們放在一個列表中,按照它們出現的時間排序。然後在update_object_position(time)
例程中,我看到下一輛車是否在當前時間之前有開始時間,如果是的話,我將車從列表中排除,直到第一輛(下一輛)車在未來有開始時間。
你想(我想)無限數量的汽車。這隻需要稍微變化。爲每個車道生成第一輛車,記錄其開始時間。當您撥打update_object_position()
時,如果您啓動了一輛車,請爲該車道找到下一輛車及其時間,並製作下一輛車。如果您有要重複的模式,請一次性生成整個模式,然後在列表清空時生成新模式。這也可以讓用戶指定可變模式流程。
最後,您是否研究過卷在裝載時會發生什麼?隨機的小型制動活動導致汽車後方略微過度反應,並且隨着輕微的過度反應累積,它變成完全停止行駛一公里的汽車。它很奇怪,所以可能對你的壁紙/屏幕保護程序有很大的影響,以及作爲一個適當的模擬。
最有可能的是在時間t有一個方程式的汽車速度。你有沒有找到一個方程來模擬這種行爲?如果是這樣,那麼其後相當簡單。你所有的待辦事項是將汽車放置在不同的起始位置,並在delta-t的每個汽車上運行下一個位置的方程,然後在delta-t時間的下一個位置對汽車進行動畫 – dchhetri 2013-04-26 03:13:00
@ user814628我計劃使用恆定速度。所以,每輛車實例的速度都是不變的,而且它的位置增量會從中得出。我主要關心的是如何測試每輛車的創建和銷燬情況,特別是考慮到多車道環境,並且不是每個時鐘都會產生新的車輛。 – heltonbiker 2013-04-26 03:15:19
你有什麼破壞車輛的條件?從控制點通過一定距離?或者也許在屏幕上不可見之後......?隨你便。同樣,您創造新車的條件是什麼?當車輛被摧毀時,你應該創建一個嗎?或者直到它達到最大上限數字...?這一切都有todo與規範,你沒有指定 – dchhetri 2013-04-26 14:52:37