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 に答える