You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为脚本添加延迟?实现动画播放完成后切换至另一动画

实现动画播放完成后延迟切换的解决方案

因为游戏的绘制循环(比如draw函数)是持续执行的,不能用阻塞式延迟(会导致画面卡顿),推荐用非阻塞式计时器来实现等待逻辑,具体修改如下:

步骤1:定义全局状态变量

先在代码的全局区域(或玩家对象的属性里)添加几个变量,用来跟踪动画状态和时间:

let isAttacking = false; // 标记是否正在播放攻击动画
let attackStartTime = 0; // 记录动画开始的时间
const ATTACK_DURATION = 1000; // 动画持续时长,单位毫秒(1000=1秒,500=0.5秒)

步骤2:修改按键触发与动画切换逻辑

替换你原有的按键判断代码,加入计时器判断:

// 按下空格且不在攻击状态时,触发攻击动画
if (keyWentDown("space") && !isAttacking) {
  player.setAnimation("attack");
  player.x += 0.001;
  isAttacking = true;
  attackStartTime = millis(); // 用p5.js的millis()获取当前运行毫秒数,其他库可换Date.now()
}

// 检查攻击动画是否达到设定时长,到点后切换回原动画
if (isAttacking && millis() - attackStartTime >= ATTACK_DURATION) {
  isAttacking = false;
  player.setAnimation("idle"); // 这里替换成你要切换的目标动画,比如待机动画
}

drawSprites();

关键点说明

  • isAttacking 用来防止重复触发攻击动画,避免多次按下空格导致计时器混乱
  • 如果你的游戏库不是p5.play,把millis()换成Date.now()即可,二者都是返回当前时间的毫秒数
  • 调整ATTACK_DURATION的值就能切换0.5秒或1秒的延迟时长

内容的提问来源于stack exchange,提问作者EmberJack18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:54:19