Project1
标题:
请问一下RMMV JS如何等待一定帧数后再执行后面的逻辑
[打印本页]
作者:
p965060457
时间:
2024-1-30 21:19
标题:
请问一下RMMV JS如何等待一定帧数后再执行后面的逻辑
我的战斗逻辑是在一个while(){}中,不想修改官方的update
目前我是可以使用requestAnimationFrame这个函数让它缓慢更新动画(而不是直接看到最后状态)
frames = 500;
frameCount = 0;
update = function () {
frameCount++;
if (frameCount <= frames) {
movingobject.sprite.x -= 1;
requestAnimationFrame(update);
}
};
update();
x();
问题是,update()仅仅只是加个队列,会马上进行x()
我希望动画播放完毕后,再进行x()
(或者大神们不用requestAnimationFrame,有直接让它暂停一些时间,一步一步播放移动的方法也可以)
作者:
p965060457
时间:
2024-1-30 21:25
我倒是问GPT问出个方法
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function BattleProcess() {
movingobject.sprite.x -= 10;
await sleep(1000);
movingobject.sprite.x -= 10;
await sleep(1000);
movingobject.sprite.x -= 10;
await sleep(1000);
}
这样好像暂时解决我的问题了。
但这样编程是好的么?
算了不管了我觉得好像还可以
作者:
shiroin
时间:
2024-1-30 22:23
我不是JS语言专业的,只能凭经验回答下
setTimeout()方法会受到单线程运行和异步处理的限制,处理复杂任务的环境下会受到排队的影响,它这个计时器就不是非常精准可能产生延迟,和编辑器自带的wait()方法(也就是常规的等待帧指令)是不一样的
如果你只是为了播放自定义的动画,其实有现成的插件可以用的,比如Drill_AnimationGif或者Drill_BattleGif,YEP_PictureSpritesheets也可以用于战斗场景中
作者:
rfvtgbzxc
时间:
2024-1-31 14:56
frames = 500;
frameCount = 0;
update = function () {
frameCount++;
if (frameCount <= frames) {
movingobject.sprite.x -= 1;
requestAnimationFrame(update);
}
else{
x();
}
};
update();
复制代码
这样就可以在最后一帧做x()了。具体细节需要楼主去了解一下异步的一些机制,以及函数的闭包原则,这样可以理解update函数每次执行时,frameCount,frames,x()是怎样的状态。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1