好的,所以我有一个实例为“男人”的影片剪辑我已经让他这样他有一个像这样的空闲和步行框架。他也可以向左/向右移动。 (我也让他受到攻击但这无关紧要);
[闲置] [走[] 最后一帧有
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;
}
}
感谢
答案 0 :(得分:2)
在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");
}
答案 1 :(得分:0)
尝试使用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表。
我在很多项目中使用过它,节省了大量时间
答案 2 :(得分:0)
我看到的一个问题是你的if / else语句。
目前,如果你的右键是up,无论你的左键是否关闭,都会调用空闲动画。它需要改为:
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();
个调用,以及空闲动画,以防止它一直播放。