我正在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