2012-08-13 70 views
0

晚上好。我正在研究一個簡單的項目,該項目使用EVENT_FRAME處理程序以矩形方式(右,上,左,下,重複)移動一個符號。這是我的代碼使用ActionScript的矩形移動3

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; 
     } 
    } 
    } 

事情是,運動保持對角線,而不是直線運動。我知道在我的邏輯中有一個錯誤,但我無法確定它是什麼。

回答

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被添加(或減少)了速度。這會創建一個對角線運動。

+0

我明白了!我終於明白了。我將endOfLine改爲1個變量,名爲endOfLine,並使其有4個狀態(0,1,2和3),分別對應於右,上,左和下(然後重複)。非常有用的建議。謝謝托馬斯先生! – Erasmus 2012-08-13 20:58:12