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

Adobe Animate+CreateJS实现对象按帧数上下往复运动的技术求助

实现对象按帧数上下往复运动的思路(基于Adobe Animate + CreateJS)

和你实现月球旋转的逻辑一致,核心就是通过createjs.Ticker的tick事件逐帧更新对象位置,用状态变量和帧数计数来控制运动的阶段切换,具体步骤如下:

1. 定义关键参数

提前把运动相关的参数单独拎出来,方便后续调整:

  • 目标运动对象:比如你做潮汐效果的海水对象,假设是_this.tideObject
  • 上升/下降总帧数:比如上升用60帧、下降用60帧,可按需修改
  • 位置参数:起始Y值(startY)、上升目标Y值(targetY),下降终点为targetY - 1
  • 状态跟踪变量:currentPhase(标记当前是「上升」还是「下降」阶段)、frameCount(记录当前阶段已运行的帧数)

2. 计算每帧位移量

根据总帧数和位移区间,算出每帧需要移动的距离:

  • 上升阶段每帧位移:(targetY - startY) / upFrames
  • 下降阶段每帧位移:((targetY - 1) - targetY) / downFrames = -1 / downFrames

3. 编写tick事件处理函数

和月球旋转的revolution_moon函数逻辑类似,逐帧更新对象位置:

// 初始化参数
const upFrames = 60; // 上升总帧数
const downFrames = 60; // 下降总帧数
const startY = _this.tideObject.y; // 初始Y值
const targetY = 100; // 上升到的目标Y值
let currentPhase = "up"; // 当前运动阶段
let frameCount = 0; // 当前阶段已运行帧数

// 绑定tick事件
createjs.Ticker.addEventListener("tick", moveTideObject);

function moveTideObject() {
    frameCount++;
    
    if (currentPhase === "up") {
        // 计算上升每帧位移,更新Y值
        const step = (targetY - startY) / upFrames;
        _this.tideObject.y += step;
        
        // 到达上升帧数,切换到下降阶段,重置计数
        if (frameCount >= upFrames) {
            currentPhase = "down";
            frameCount = 0;
        }
    } else if (currentPhase === "down") {
        // 计算下降每帧位移,更新Y值
        const step = ((targetY - 1) - targetY) / downFrames;
        _this.tideObject.y += step;
        
        // 到达下降帧数,切换回上升阶段,重置计数
        if (frameCount >= downFrames) {
            currentPhase = "up";
            frameCount = 0;
        }
    }
}

额外说明

  • 如果需要更平滑的运动,可把线性位移换成缓动公式,但你要的是按帧数精准控制,线性位移就足够
  • 可以把参数改成Animate舞台上的可配置变量,不用改代码就能调整运动参数

内容的提问来源于stack exchange,提问作者Jean-François CARIOU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:27:31