2014-11-24 2 views
0

AS3를 처음 사용하고이 게임 메카닉을 올바르게 작동 시키려고합니다. 제가해야할 일은 각 유성이 화면에 나타나 자마자 왼쪽으로 움직 이도록하는 것입니다, 그러나 그들은 전혀 움직이지 않습니다. 누구든지이 문제를 해결하는 방법을 알고 있다면 크게 감사하겠습니다! 코드를 스테이지 코드와 객체 (유성) 클래스 코드의 두 부분으로 나누었습니다.AS3 개체 이동

아래 코드는 무대에 있습니다.

import flash.events.MouseEvent; 
import flash.events.Event; 

var mcShip:Ship; 
var meteor:Meteor; 
var uiTimer:uint = 0; 
var aMeteors:Array = new Array(); 

function InitializeGame():void 
{ 
    mcShip= new Ship(); 
    mcShip.Initialize(100,200); 
    stage.addChild(mcShip); 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseInput); 
    stage.addEventListener(Event.ENTER_FRAME,GenerateMeteors); 
} 

function MouseInput(me_:MouseEvent):void 
{ 
    mcShip.Movement(me_); 
} 

function GenerateMeteors(eGenerate:Event):void 
{ 
    if (0 == ++uiTimer%10) 
    { 
     meteor= new Meteor(); 
     aMeteors.push(meteor); 
     meteor.Initialize(550, 390, 20); 
     stage.addChild(meteor); 

     trace (aMeteors); 
    } 
} 
InitializeGame(); 

아래는 객체 (유성) 코드입니다.

import flash.events.Event; 
var speed:int; 
var aMeteors:Array = new Array(); 


function Initialize(iPosX_:int, iPosY_:int, iSpeed_:int):void 
{ 
    x = iPosX_; 
    y = Math.round(Math.random()* iPosY_) 
    speed = Math.round(Math.random() * iSpeed_); 
    var timer:Timer = new Timer(12) 
    timer.addEventListener(TimerEvent.TIMER,Update); 
    timer.start(); 

} 



function Update(ev_:Event):void 
{ 
    for (var a:int=0; a < aMeteors.length; a++) 
    { 
     aMeteors[a].x -= 1 * speed; 
    } 
} 

기본적으로 나는 유성을 x 축에서 왼쪽으로 이동하려고합니다. 나는 제대로 움직이지 못하게하는 많은 문제가 있다고 확신하지만, 그것을 이해할 수는 없다. 사전에 모든 도움을 주셔서 감사합니다! 모든

답변

1

전나무 : 당신이 다음 (400)에 의해이 숫자를 곱할 수, 이것은 0에서 400 사이의 숫자를 얻기 위해 0과 1 사이의 난수를 생성

Math.random() 

를 사용하여 임의의 숫자를 생성하는

Math.round(number) 

이 소행성을 이동하는 데 사용할 먼저 당신은 그들 모두를 저장하는 배열을 만들어야합니다.

var asteroids:Array = new Array; 

타이머를 추가하려면 이벤트 수신기가있는 타이머가 필요합니다.

var asteroidAdder:Timer = newTimer([delay],[repetitions or 0 for infinite repetitions]); 
asteroidAdder.addEventListener(TimerEvent.TIMER,addAsteroid); 

당신은 소행성을 생성하는 기능으로 addAsteroid를 확인하고 사용하여 배열에 추가해야합니다

asteroids.push(asteroid); 

귀하의 마지막 단계로 이동하는 이벤트 리스너를 통해 또 다른 타이머를 추가하는 것입니다. 함수를 호출하도록합니다. 아마도 'moveAsteroids'입니다. 이 함수는, 'for'루프 무언가이 같아야 내 :

for (var a:int=0; a<asteroids.length; a++){ 
    asteroids[a].x+=asteroids[a].speed; 
} 

이 배열의 각 오브젝트를 통과한다 (소행성 [0] 다음 소행성 [1] 등) 및 그 X 위치를 이동 그들의 속도로. 화면 가장자리에서 벗어날 때 사용할 수표를 추가 할 수도 있습니다. 이 경우 다음을 사용하여 for 루프를 통해 제거 할 수 있습니다.

removeChild(asteroids[a]); //removes the asteroid being checked from the stage 
asteroids.splice(a,1) //remove the asteroid at position 'a' in asteroids from the array 

이 방법을 사용하면 쉽게 얻을 수 있습니다. 함수를 만들고 이벤트 리스너를 사용하는 것에 대한 지식이 있다고 가정했습니다. 문제가 있으면 의견을 남기십시오.

+0

감사합니다, Trex. 나는 여전히 문제를 해결하려고 노력하고 있지만, 당신의 반응은 나를 도와주고 있습니다! – Eindigen

+0

문제의 일부를 수정했습니다, Trex,하지만 유성이 왼쪽으로 이동하는 데 문제가있어 원래 게시물을 업데이트했습니다! 도와 줘서 고마워. – Eindigen

+0

1 *은 아마도 중복되지만 운동 코드가 제대로 작동하는 것처럼 보입니다. 코드를 실행할 때 실제로 어떤 일이 일어 났는지 말해 줄 수 있습니까? 유성이 나타나고 여전히 머물러 있니? – Trex