As3 如何翻转影片剪辑以面对运动方向?

Posted

技术标签:

【中文标题】As3 如何翻转影片剪辑以面对运动方向?【英文标题】:As3 How to flip a movieclip to face movement direction? 【发布时间】:2011-12-01 09:02:07 【问题描述】:

在迷宫游戏中工作。当按下左键时,movieclip (char) 应该向左旋转 90 度。

如果我错了,请纠正我,但我认为我可以使用此代码;

char.scaleX *= -1;

然而,最重要的是角色没有穿过迷宫的墙壁。 我认为这就是我实现上述代码的问题。 因为我放到这里就不能正常工作了;

    if(!mazehit) 

                    char.y += speed;
                    char.scaleX *= -1;


                

我的问题是,我必须将代码放在哪里才能翻转影片剪辑?

var leftArrow, rightArrow, upArrow, downArrow:Boolean;
var speed:Number = 4;
var charRadius:Number = 10;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, everyFrame);

function keyPressed(event:KeyboardEvent):void 
    if (event.keyCode == Keyboard.LEFT) 
        leftArrow = true;
    
    if (event.keyCode == Keyboard.RIGHT) 
        rightArrow = true;
    
    if (event.keyCode == Keyboard.UP) 
        upArrow = true;
    
    if (event.keyCode == Keyboard.DOWN) 
        downArrow = true;
    


function keyReleased(event:KeyboardEvent):void 
    if (event.keyCode == Keyboard.LEFT) 
        leftArrow = false;
    
    if (event.keyCode == Keyboard.RIGHT) 
        rightArrow = false;
    
    if (event.keyCode == Keyboard.UP) 
        upArrow = false;
    
    if (event.keyCode == Keyboard.DOWN) 
        downArrow = false;
    


function everyFrame(event:Event):void 
    var mazehit:Boolean = false;
    if (leftArrow) 
        for(var i:int = 0; i < speed; i++) 
            if(bounds.hitTestPoint(char.x - charRadius - i, char.y, true)) 


                mazehit = true;
                break;
            
        
        if(!mazehit) 

            char.x -= speed;




        

     else if (rightArrow) 
        for(var j:int = 0; j < speed; j++) 
            if(bounds.hitTestPoint(char.x + charRadius + j, char.y, true)) 

                mazehit = true;
                break;
            
        
        if(!mazehit) 

            char.x += speed;
        
     else if (upArrow) 
        for(var k:int = 0; k < speed; k++) 
            if(bounds.hitTestPoint(char.x, char.y - charRadius - k, true)) 

                mazehit = true;
                break;
            
        
        if(!mazehit) 
            char.y -= speed;
        

     else if (downArrow) 

        for(var m:int = 0; m < speed; m++) 
            if(bounds.hitTestPoint(char.x, char.y + charRadius + m, true)) 

                mazehit = true;
                break;
            
        
        if(!mazehit) 

            char.y += speed;


        
    

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

我会根据速度更新方向:

char.scaleX = (speed > 0) ? 1 : -1;

或者,通过按下的键:

if(keyLeft && !keyRight)

    char.scaleX = -1;

else if(keyRight && !keyLeft)

    char.scaleX = 1;

else

    // keep current direction

【讨论】:

感谢您的回答,我尝试了几件事,但正如您所见,整个代码都充满了 if 语句,所以我很困惑这部分应该去哪里 计算完所有内容后,将其放在 EnterFrame 函数的末尾。

以上是关于As3 如何翻转影片剪辑以面对运动方向?的主要内容,如果未能解决你的问题,请参考以下文章

用flash as3语言如何将影片剪辑存入一个数组以及如何访问?

调整影片剪辑 AS3 的大小

As3 影片剪辑背景图像大小

Flash AS3 从影片剪辑访问全局变量

as3 以普通影片剪辑的形式访问子项(gotoAndPlay 等)

如何以静默方式预加载有声音的影片剪辑?