Сначала превратите свои символы в мувиклипы. Затем создайте базовый класс MySymbol.as для ваших символов, например:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.geom.Point;
public class MySymbol extends MovieClip
{
public var speed:Number; // Pixels moved per frame
public function MySymbol(speed:Number, startPosition:Point)
{
this.speed = speed;
this.addEventListener(Event.ENTER_FRAME, update);
this.x = startPosition.x;
this.y = startPosition.y;
}
private function update():void
{
this.x -= this.speed;
if (this.x < 0 - this.width) { // We're at the left edge
this.removeEventListener(Event.ENTER_FRAME, update);
this.dispatchEvent(new Event(Event.COMPLETE));
}
}
}
}
Затем убедитесь, что ваши видеоклипы экспортированы для AS3 (опция «Связывание» для элемента в библиотеке). Сделайте имя класса для каждого элемента уникальным (например, MySymbol1, MySymbol2) и установите для базового класса значение MySymbol.
Ваш класс документа может выглядеть примерно так:
package {
import flash.display.MovieClip;
import flash.events.Event;
import MySymbol; // Not strictly needed
public class DocumentClass extends flash.display.MovieClip
{
private static var SYMBOLS:Array = new Array(MySymbol1, MySymbol2);
public function DocumentClass()
{
// Create five symbols:
for (var i:int = 0; i < 5; i++) {
makeSymbol();
}
}
private function makeSymbol():void
{
// Pick a random symbol from the array:
var symType:Class = SYMBOLS[Math.random() * SYMBOLS.length];
// Construct the new symbol:
var loc:Point = new Point(stage.stageWidth, Math.random() * stage.stageHeight);
var sym:MySymbol = new symType(1 + Math.random() * 30, loc);
// Listen for the object hitting the left edge:
sym.addEventListener(Event.COMPLETE, remakeObject);
this.addChild(sym);
}
private function remakeObject(e:Event):void
{
e.target.removeEventListener(Event.COMPLETE, remakeObject);
this.removeChild(e.target);
// Replace the dead symbol:
makeSymbol();
}
}
}
Гораздо эффективнее, если вместо уничтожения и воссоздания объекта, летящего за сценой, вы повторно используете существующий и перемещаете его вправо. Но эту оптимизацию вы можете реализовать позже, если все станет медленно.
Обратите внимание, что весь приведенный выше код является НЕПРОВЕРЕННЫМ, и я давно не кодировал AS3, так что, вероятно, в нем есть по крайней мере несколько ошибок. Надеюсь, это послужит хорошей отправной точкой.