设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 202|回复: 3
打印 上一主题 下一主题

[有事请教] 请问一下RMMV JS如何等待一定帧数后再执行后面的逻辑

[复制链接]

Lv1.梦旅人

梦石
0
星屑
38
在线时间
2 小时
注册时间
2020-5-7
帖子
3
跳转到指定楼层
1
发表于 2024-1-30 21:19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
我的战斗逻辑是在一个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,有直接让它暂停一些时间,一步一步播放移动的方法也可以)

Lv1.梦旅人

梦石
0
星屑
38
在线时间
2 小时
注册时间
2020-5-7
帖子
3
2
 楼主| 发表于 2024-1-30 21:25:44 | 只看该作者
我倒是问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);
}

这样好像暂时解决我的问题了。
但这样编程是好的么?
算了不管了我觉得好像还可以
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3784
在线时间
982 小时
注册时间
2016-12-6
帖子
367
3
发表于 2024-1-30 22:23:33 | 只看该作者
我不是JS语言专业的,只能凭经验回答下

setTimeout()方法会受到单线程运行和异步处理的限制,处理复杂任务的环境下会受到排队的影响,它这个计时器就不是非常精准可能产生延迟,和编辑器自带的wait()方法(也就是常规的等待帧指令)是不一样的

如果你只是为了播放自定义的动画,其实有现成的插件可以用的,比如Drill_AnimationGif或者Drill_BattleGif,YEP_PictureSpritesheets也可以用于战斗场景中
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4914
在线时间
445 小时
注册时间
2011-3-26
帖子
101
4
发表于 2024-1-31 14:56:06 | 只看该作者
  1. frames = 500;
  2. frameCount = 0;
  3. update = function () {
  4.   frameCount++;
  5.   if (frameCount <= frames) {
  6.     movingobject.sprite.x -= 1;
  7.     requestAnimationFrame(update);
  8.   }
  9.   else{
  10.    x();
  11. }
  12. };
  13. update();
复制代码

这样就可以在最后一帧做x()了。具体细节需要楼主去了解一下异步的一些机制,以及函数的闭包原则,这样可以理解update函数每次执行时,frameCount,frames,x()是怎样的状态。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-27 16:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表