2014-11-24 2 views
0

новичок в AS3 и пытается заставить эту игру работать правильно. Мне нужно сделать, чтобы каждый метеор двигался влево, как только он появляется на экране, но они вообще не двигаются. Если кто-нибудь знает, как это исправить, я бы очень признателен! Я разделил код на две части: код этапа и код класса объекта (метеор).AS3 Object Movement

Ниже приведен код на сцене.

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

По существу, я пытаюсь заставить метеоры перемещаться влево на оси х. Уверен, у меня много проблем, которые мешают ему двигаться правильно, но я не могу понять. Спасибо за помощь!

ответ

1

Елки всех: чтобы сгенерировать случайное число, используйте

Math.random() 

Это генерирует случайное число в диапазоне от 0 до 1. Для того, чтобы получить число от 0 до 400, вы можете умножить это число на 400, а затем использовать

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 (var a:int=0; a<asteroids.length; a++){ 
    asteroids[a].x+=asteroids[a].speed; 
} 

Это будет пройти через каждый объект в массиве (астероиды [0], то астероиды [1] и так далее) и переместить их х позиций по их скорости. Вы также можете добавить проверку, когда они уходят с края экрана. Когда это произойдет, вы можете удалить их через цикл 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