如何让Newgrounds论坛找到的makeMcShake脚本正常运行?
Flash影片剪辑震动脚本解析与使用指南
一、脚本工作原理
这个脚本专为Flash的MovieClip(影片剪辑)实现随机震动效果,核心逻辑分为四部分:
- 全局变量
AMOUNT:控制震动幅度,数值越大,影片剪辑偏移初始位置的范围越广。 makeMcShake函数:给目标影片剪辑记录初始坐标(存在自定义属性defaultPos中),同时绑定EnterFrame事件——该事件会在每帧渲染时触发(每秒执行次数等于Flash项目帧率)。shake函数:每帧执行时,给影片剪辑的x、y坐标添加随机偏移。偏移范围是-AMOUNT/2到+AMOUNT/2之间(Math.random()生成0-1的随机数,乘以AMOUNT后减去一半,得到正负对称的偏移值),以此模拟震动效果。stopMcShake函数:移除EnterFrame事件停止震动,同时将影片剪辑放回初始位置。
注意:原脚本存在两处错误,不修正无法正常运行:
- 对象字面量写法错误:
{which.x, which.y}需改为{x: which.x, y: which.y},AS3要求明确键名。- 随机数方法写错:
Math.rand()是笔误,Flash中正确的随机数方法为Math.random()。
二、使用方法
步骤1:准备Flash项目
在Flash舞台上放置需要震动的影片剪辑,在属性面板给它设置实例名(比如shake_mc)。
步骤2:添加修正后的脚本
将修正后的脚本放到时间轴的关键帧上(比如第一帧):
var AMOUNT = 20; // 根据需求调整震动幅度 function makeMcShake(which:MovieClip) { which.defaultPos = {x: which.x, y: which.y}; which.addEventListener(Event.EnterFrame, shake); } function stopMcShake(which:MovieClip) { which.removeEventListener(Event.EnterFrame, shake); which.x = which.defaultPos.x; which.y = which.defaultPos.y; } function shake(e:Event) { var target:MovieClip = e.currentTarget as MovieClip; target.x = target.defaultPos.x + Math.random() * AMOUNT - AMOUNT / 2; target.y = target.defaultPos.y + Math.random() * AMOUNT - AMOUNT / 2; }
步骤3:触发与停止震动
通过事件(按钮点击、游戏剧情触发等)调用函数控制震动:
- 启动震动:
makeMcShake(shake_mc)(替换shake_mc为你的影片剪辑实例名) - 停止震动:
stopMcShake(shake_mc)
示例:按钮控制震动
// 假设舞台上有两个按钮,实例名分别为start_btn和stop_btn start_btn.addEventListener(MouseEvent.CLICK, startShakeHandler); stop_btn.addEventListener(MouseEvent.CLICK, stopShakeHandler); function startShakeHandler(e:MouseEvent):void { makeMcShake(shake_mc); } function stopShakeHandler(e:MouseEvent):void { stopMcShake(shake_mc); }
内容的提问来源于stack exchange,提问作者Johnson Yan
相关产品推荐
相关产品推荐

