在as3中移动时的行走动画
Posted
技术标签:
【中文标题】在as3中移动时的行走动画【英文标题】:Walking animation while moving in as3 【发布时间】:2012-03-08 10:22:20 【问题描述】:好的,所以我有一个电影剪辑实例为“男人”,我制作了他,这样他就有了这样的空闲和行走帧。他也可以向左/向右移动。 (我也让他攻击,但这无关紧要);
[空闲][行走[] 最后一帧有
gotoAndPlay("walk");
我需要它循环遍历“行走”帧,直到我抬起左/右键然后回到“空闲”位置。发生的情况是,即使我没有提起钥匙,它也会通过一次循环然后进入空闲状态。这是我的代码
var leftKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var charSpeed:Number = 7;
man.addEventListener(Event.ENTER_FRAME, moveChar);
function moveChar(event:Event):void
if(leftKeyDown || rightKeyDown)
man.gotoAndPlay("walk");
if(rightKeyDown)
man.x += charSpeed;
man.scaleX=1;
if(leftKeyDown)
man.x -= charSpeed;
man.scaleX=-1;
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
function checkKeysDown(event:KeyboardEvent):void
if(event.keyCode == 37 || event.keyCode == 65)
leftKeyDown = true;
if(event.keyCode == 38 || event.keyCode == 87)
upKeyDown = true;
if(event.keyCode == 39 || event.keyCode == 68)
rightKeyDown = true;
if(event.keyCode == 40 || event.keyCode == 83)
downKeyDown = true;
// checking for upkeys
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
function checkKeysUp(event:KeyboardEvent):void
if(event.keyCode == 37 || event.keyCode == 65)
leftKeyDown = false;
man.gotoAndStop("idle");
if(event.keyCode == 38 || event.keyCode == 87)
upKeyDown = false;
if(event.keyCode == 39 || event.keyCode == 68)
rightKeyDown = false;
man.gotoAndStop("idle");
if(event.keyCode == 40 || event.keyCode == 83)
downKeyDown = false;
谢谢
【问题讨论】:
【参考方案1】:在 if 语句通过后退出函数,如果所有其他方法都失败,则它是空闲的。
if(leftKeyDown)
man.x -= charSpeed;
man.scaleX=-1;
man.gotoAndPlay("walk");
return;
if(rightKeyDown)
man.x += charSpeed;
man.scaleX=1;
man.gotoAndPlay("walk");
return;
man.gotoAndStop("idle");
或者如果你想要另一个方面
switch(true)
case leftKeyDow:
man.x -= charSpeed;
man.scaleX=-1;
man.gotoAndPlay("walk");
break;
case rightKeyDown:
man.x += charSpeed;
man.scaleX=1;
man.gotoAndPlay("walk");
break;
default:
man.gotoAndStop("idle");
【讨论】:
它进入“walk”帧,但之后不播放。 如果我玩(),它会起作用;但我需要它是 gottoAndPlay();因为我还要做一个攻击动画 那个问题与这个问题无关。【参考方案2】:尝试使用 bliting。以下是一些学习方法的网站。
http://www.gotoandlearn.com/play.php?id=140
http://www.gotoandlearn.com/play.php?id=147
http://www.adobe.com/devnet/flash/articles/blitting_mc.html
http://blog.flexwiz.net/spritesheet-animation-in-as3/
您还可以使用 TexturePacker 创建您的 blit/sprite 表。
http://www.texturepacker.com/
我在很多项目中都使用过它,它可以节省大量时间
【讨论】:
我认为这不是很有必要【参考方案3】:我看到的一个问题是您的 if/else 语句。
目前,如果你的右键向上,无论你的左键是否向下,都会调用空闲动画。它需要更改为:
if(leftKeyDown || rightKeyDown)
man.gotoAndPlay("walk");
else
man.gotoAndStop("idle");
if(rightKeyDown)
man.x += charSpeed;
man.scaleX=1;
if(leftKeyDown)
man.x -= charSpeed;
man.scaleX=-1;
还要确保在行走和空闲动画结束时在动画循环中调用stop();
,以防止它一直播放。
【讨论】:
以上是关于在as3中移动时的行走动画的主要内容,如果未能解决你的问题,请参考以下文章
高分求一个 flash as3.0的关于鼠标拖曳startDrag() 方法后 怎么获取拖曳后的坐标!!做凹透镜原理动画!