as3中移动时的行走动画
好吧,我有一个影片剪辑实例为“男人”,我制作了他,这样他就有了像这样的空闲和行走框架。他还可以向左/向右移动。 (我也让他攻击,但这无关紧要);
[闲置][行走] 最后一帧
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;
}
}
谢谢
Ok so i have an movie clip instanced as "man" I have made him so that he has a Idle and Walk frame like this. He can also move left/right. (I also made him attack but that is irrelevant);
[Idle][walk []
The last frame has
gotoAndPlay("walk");
I need it to loop through the "walk" frames until i lift up the left/right key then go back to "idle" position. What happens is that it will go through the loop once and than go to idle even if I haven't lifted the key. This is my code
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;
}
}
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只要在 if 语句通过后退出该函数,如果其他一切都失败,则该函数处于空闲状态。
或者如果你想要另一个方面
Just exit out of the function after an if statement passes and if all else fails it is idle.
or if you want another aspect
尝试使用位块传送。这里有一些网站可以学习如何做到这一点。
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/
我在很多项目中使用过它,它节省了大量时间
Try using bliting. Here are some sites to learn how to do it.
http://www.gotoandlearn.com/play.php?id=140 <- this is a good one!
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/
You could also use TexturePacker to create your blit/sprite sheets.
http://www.texturepacker.com/
I have used it on many projects and it saves tons of time
我看到的一个问题是你的 if/else 语句。
目前,如果你的右键是向上的,无论你的左键是否按下,都会调用空闲动画。它需要更改为类似的内容:
另外,请确保在步行和空闲动画结束时的动画循环中有一个
stop();
调用,以防止它一直播放。One problem I see is your if/else statements.
Currently, if your right key is up, regardless of if your left key is down, the idle animation will be called. It needs to be changed to something like:
Also make sure you have a
stop();
call in your animation loop at the end of the walk and idle animations to prevent it playing all the way through.