我正在RPG Maker XP(用紅寶石製作)中製作一些動畫腳本,允許您顯示動態圖像。我的問題在這裏並不是嚴格意義上的RPG Maker,而是一般性的術語。這是我發現至今的代碼和它的工作原理,但有問題的:正確的OO 2D動畫邏輯
class Poser
attr_accessor :images
def initialize
@images = Sprite.new
@images.bitmap = RPG::Cache.picture('Character.png') #display picture
@images.x = 540 #place it on the bottom right corner of the screen
@images.y = 180
end
def move(x,y)
@images.x += x
@images.y += y
end
def animate(x,y,step,delay) #Animate moving the picture up and down with delay
forward = true
2.times { #the first loop, do code 2 times of :
step.times {
wait(delay) #wait x frame
if forward
move(x/step,y/step) #move the picture down
else
move(-x/step,-y/step) #move the picture up
end
}
wait(delay*3)
forward = false
}
end
def wait(time)
while time > 0
time -= 1
Graphics.update
end
end
end
然後我創建它的一個實例,並調用的方法:
$test = Poser.new
$test.animate(0,10,10,10)
上面的代碼做的是上下移動圖片(就像呼吸動畫,你的頭部上下襬動)
正如你所看到的,我使用循環函數來延遲移動圖片。我得到的是,我不能做別的什麼直到動畫完成。我所說的「其他」是指我的角色四處走動,與NPC交談,我想在背景中播放動畫時做這些事情。最後,遊戲在循環塊中「暫停」。
是否有另一種方法可以在沒有循環的情況下進行動畫製作,或者,在動畫完成之前不會「暫停」屏幕的任何動作?提前致謝。
謝謝你的輸入,是的,該方法在遊戲主循環中調用。我在做的是在遊戲主循環中循環播放動畫,所以當然結果就是這樣。現在我要弄清楚如何讓這個對象與遊戲主循環「並行」運行。真的有可能有「多循環」嗎?就像多線程一樣,進程a轉到線程A,b轉到B,兩個線程都在主循環上運行? – AzDesign
不,不。這不完全是。你必須打電話,幾乎是該方法的一小部分。每次遊戲循環被調用時,做一小部分動作。在某種程度上,只需將方法中的代碼放在循環中並將其放入遊戲循環中(通過更改,再次閱讀答案)。 – Linuxios
工作時間在腳本上擺弄之後,我從你的答案中得到了建議,而不是在我自己的方法中定義自己的循環,而是在遊戲的主循環的Update方法中採用動畫行爲(move(x,y))搜索這個位置在哪裏)。它的工作原理現在我可以在動畫在後臺運行時移動。謝謝,這解決了我的問題 – AzDesign