as3 flash中的攻击动画问题
Posted
技术标签:
【中文标题】as3 flash中的攻击动画问题【英文标题】:Attack animation issue in as3 flash 【发布时间】:2016-09-11 17:24:53 【问题描述】:我的问题是,当我按下空格键时,它会播放攻击动画,但一旦我松开它,它就会停止动画过程。我想要它,我可以简单地按下并释放按钮,然后它会自行完成动画。
function keyPressed(e:KeyboardEvent):void
if(e.keyCode == Keyboard.RIGHT)
rDown = true;
if(e.keyCode == Keyboard.LEFT)
lDown = true;
if(e.keyCode == Keyboard.UP && onGround)
jumped = true;
if(e.keyCode == Keyboard.DOWN && onGround)
crouchMode = true;
if(e.keyCode == Keyboard.SPACE && onGround)
attackMode = true;
function keyReleased(e:KeyboardEvent):void
if(e.keyCode == Keyboard.RIGHT)
rDown = false;
if(e.keyCode == Keyboard.LEFT)
lDown = false;
if(e.keyCode == Keyboard.UP)
jumped = true;
if(e.keyCode == Keyboard.DOWN)
crouchMode = false;
if(e.keyCode == Keyboard.SPACE)
attackMode = false;
function gameLoop(e:Event):void
playerStart();
function playerStart():void
warMage.y += grav;//Apply gravity to player
collisionStageCheck();
if(crouchMode)
warMage.gotoAndStop("CrouchWarmage");
rDown = false;
lDown = false;
if(attackMode)
if(warMage.scaleX == 1)//If we face right
warMage.x += 5;//Lunge right
if(warMage.scaleX == -1)//If we face left
warMage.x -= 5;//Lunge left
warMage.gotoAndPlay("AttackWarmage");
if(rDown)//If we move right
warMage.x += 12;
warMage.gotoAndStop("RunWarmage");
warMage.scaleX = 1;
if(lDown)//If we move left
warMage.x -= 12;
warMage.gotoAndStop("RunWarmage");
warMage.scaleX = -1;
if(jumped)//If we jumped
warMage.y -= 30;
warMage.gotoAndStop("JumpWarmage");
if(!rDown && !lDown && !jumped && !crouchMode && !attackMode)//If we are in neither states
warMage.gotoAndStop("idleWarmage");
【问题讨论】:
看起来这正是您的代码应该做的(if(!rDown && !lDown && !jumped && !crouchMode && !attackMode)
将动画切换到空闲状态),如果释放空格键,您可以保持attackMode
处于打开状态,它应该会有所帮助。
当我释放攻击模式时,它永远不会停止,我试图寻找另一个信号来说明它什么时候应该是假的。喜欢控制动画,但很难找到其他任何东西
尝试在AttackWarmage
的最后一帧添加gotoAndStop("idleWarmage")
不起作用:L。有没有办法在attackMode为真时控制动画,这样我就可以在不释放密钥的情况下禁用它?
【参考方案1】:
攻击动画未完成,因为attackMode
在空格键keyReleased
函数上被设置为false
。不要那样做。相反,在动画的最后一帧设置attackMode
false。在嵌套在 if (attackMode)
逻辑块内的 Main 类中执行此操作:
if (heroMage.currentFrame == "LastFrame")
attackMode = false;
显然你会将攻击动画的最后一帧命名为“LastFrame”。
我还发现了一种更优雅的方法here,使用eventDispatcher
,它消除了检查当前帧的需要,但增加了在影片剪辑时间轴中包含代码的轻微麻烦(在我看来)。
【讨论】:
有没有办法通过我的主类访问攻击动画时间线? 我添加了一种使用 .currentFrame 在主时间线中完成所有操作的方法。以上是关于as3 flash中的攻击动画问题的主要内容,如果未能解决你的问题,请参考以下文章
高分求一个 flash as3.0的关于鼠标拖曳startDrag() 方法后 怎么获取拖曳后的坐标!!做凹透镜原理动画!