2012-08-13 4 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

두 개의 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을 endOfLine이라는 이름의 변수 1 개로 변경하여 오른쪽, 위, 왼쪽, 아래 각각 (다시 반복)에 해당하는 4 개의 상태 (0, 1, 2 및 3)를 만들었습니다. 매우 유용한 조언. Thomas 선생님, 고마워요! – Erasmus

관련 문제