這是一個關於在同一時間製作不同動畫的算法/數據結構問題。例如,球在一毫秒內下降一個像素,子彈在一毫秒內移動5個像素,並且一個人在20毫秒內移動一個像素。並認爲有數百個在一起。將所有動畫放在一起,移動我們需要在一個函數調用中移動的內容以及刪除動畫完成的內容的最佳方式是什麼?我不想爲每個人創建一個線程。我想要做的是創建一個線程,移動所有項目並休眠,直到需要移動對象。製作並發動畫的最佳方式是什麼?
注意:我正在使用Java/Swing,在JPanel中打印對象和圖像。
這是一個關於在同一時間製作不同動畫的算法/數據結構問題。例如,球在一毫秒內下降一個像素,子彈在一毫秒內移動5個像素,並且一個人在20毫秒內移動一個像素。並認爲有數百個在一起。將所有動畫放在一起,移動我們需要在一個函數調用中移動的內容以及刪除動畫完成的內容的最佳方式是什麼?我不想爲每個人創建一個線程。我想要做的是創建一個線程,移動所有項目並休眠,直到需要移動對象。製作並發動畫的最佳方式是什麼?
注意:我正在使用Java/Swing,在JPanel中打印對象和圖像。
我最近在Python中做了類似的事情。我不知道這是否是最好的方法,但這是我所做的。
創建一個抽象Event
類具有以下公共接口:
tick
- 計算自最後一跳多少時間已經過去了。執行與該時間段成比例的工作。應該頻繁地調用這個來創造順暢運動的幻覺;大概每秒十六次。isDone
- 當事件發生時返回true。爲任何需要多個幀完成的事件創建Event的子類。旋轉,縮放,顏色變化等。如果您想要將圖像從屏幕的一個部分移動到另一個部分,您可以創建一個Event的TweenEvent
子類。在每個tick
期間,將圖像重新繪製在離原始位置較遠的位置,並朝目標位置更遠。
你可以同時運行很多活動,比如:
Array<Event> events = new Array<Event>();
//add a bunch of TweenEvents here - one for a bullet, one for a ball, etc.
while(True){
Sleep(1/16);
for(Event e in events){
e.tick();
if (e.isDone()){events.remove(e);}
}
}
謝謝你的回答,我正在使用類似的方法,我覺得它有點複雜。也許我們可以在這裏找到更好的方法:) – sedran
這完全取決於平臺。例如,使用基於變換矩陣的對象動畫將允許您將一些動畫合併爲一個動畫(平移+縮放等)。 – Till
我所做的只是使用繪畫方法並在Java,Swing中繪製不同的對象和圖像不同的地方。 – sedran