0

晚上好。我正在做一个简单的项目,其中涉及使用 EVENT_FRAME 处理程序以矩形方式(右、上、左、下、重复)移动的符号。这是我的代码

import flash.events.Event;

var moveRate:Number = 20;
var maxX:Number = 500;
var minX:Number = 80;
var maxY:Number = 60;
var minY:Number = 320;
var endOfLineX:int = 0;
var endOfLineY:int = 0;

roboSym.addEventListener(Event.ENTER_FRAME, move1);
roboSym.addEventListener(Event.ENTER_FRAME, move2);

    function move1(e:Event):void
    {
    if (endOfLineX == 0)
    {
        roboSym.x +=  moveRate;
        if (roboSym.x >= maxX)
        {
                endOfLineX = 1;
        }
    }
    else if (endOfLineX == 1)
    {
        roboSym.x -=  moveRate;
        if (roboSym.x <= minX)
        {
            endOfLineX = 0;
        }
    }


    }
    function move2(e:Event):void
    {

    if (endOfLineY == 0)
    {
        roboSym.y -=  moveRate;
        if (roboSym.y <= maxY)
        {
            endOfLineY = 1;
        }
    }
    else if (endOfLineY == 1)
    {
        roboSym.y +=  moveRate;
        if (roboSym.y >= minY)
        {
            endOfLineY = 0;
        }
    }
    }

问题是,运动一直是对角线运动,而不是直线运动。我知道我的逻辑中某处有错误,但我无法确定它是什么。

4

1 回答 1

1

好吧,您有 2 个EnterFrame事件,它们都有变量 endOfLine,这使它们同时垂直和水平移动,从而导致对角线运动。还有一个小提示,您不必为 EnterFame 提供 2 个事件函数,您只需将 move2 中的代码粘贴到 move1 中,它仍然可以工作!你基本上得到了这个:

function moveCombined(e:Event):void{
    if(endOfLineX == 1){
        roboSym.x += rate;
        //So the robot moves horizontal
    }else if(endOfLineX == 0){
        roboSym.x -= rate;
        //It still moves horizontal but the other way
    }
    //And you do the same for the vertical motion
    if(endOfLineY == 1){
        roboSym.y += rate;
        //So the robot moves vertical
    }else if(endOfLineY == 0){
        roboSym.y -= rate;
        //It still moves vertical but the other way
    }
}

因此,每一帧,robotSym.x 都会随着速率增加(或减去),robotSym.y 也会随着速率增加(或减去)。这会产生对角线运动。

于 2012-08-13T19:06:50.323 回答