
Код AS3:
package code.game.background
{
import code.feather.Antimation.FeatherClip;
import code.feather.ScreenManager.ScreenManager;
import flash.display.Sprite;
import code.featherEngine.featherConsole.Console;
public class BackgroundManager extends Sprite
{
private static var _instance:BackgroundManager;
private var _screen:ScreenManager;
private var backgrounds:Array;
public function BackgroundManager()
{
if(_instance != null)
{
throw("Error use instance in BackgroundManager");
}
_instance = this;
_screen = ScreenManager.instance;
backgrounds = new Array();
}
public static function get instance():BackgroundManager
{
return (_instance == null) ? new BackgroundManager() : _instance;
}
/**
* Добавление заднего статичного фона по умолчанию в центре экрана.
* @param name - имя закэшированного feather клипа.
* @param type - тип фона статичный или динамичный.
* @param speed - если динамичный укажите скорость.
* @param num - число динамических фонов на экране (1 по умолчанию).
* @param _x - положение по х на сцене.
* @param _y - положение по у на сцене.
*/
public function addBackground(name:String, type:String, speed:Number = 0, koef:Number = 1, num:int = 1, _x:Number = 320, _y:Number = 240):void
{
if (num == 1)
{
createBackground(name, type, speed, koef, _x, _y, _x);
}
else
{
for (var i:int = 0; i < num; i++)
{
createBackground(name, type, speed, koef, _x + (640 * i), _y, _x);
}
}
Console.getInstance().message("Game: Added " + num + " new background.", Console.INFORMATION);
}
private function createBackground(name:String, type:String, speed:Number, koef:Number, _x:Number, _y:Number, oldX:Number):void
{
var background:Object = new Object();
background.name = name;
background.koef = koef;
background.graf = new FeatherClip();
background.graf.setAnim(name);
background.speed = speed;
background.graf.x = _x;
background.graf.y = _y;
background.X = oldX;
if (type == "dynamic")
{
backgrounds.push(background);
_screen.addToScene(background.graf);
}
else if (type == "static")
{
_screen.addToScene(background.graf);
}
}
private function moveBackground():void
{
if (backgrounds.length > 0)
{
for (var i:int = 0; i < backgrounds.length; i++)
{
//Может быть из - за этого?
var obj:Object = backgrounds[i];
if (obj.speed != null)
{
obj.graf.x -= obj.speed;
}
else
{
Console.getInstance().message("Error: не указана скорость фона", Console.ERROR);
}
}
}
}
private function redrawBackgrounds():void
{
if (backgrounds.length > 0)
{
for (var i:int = 0; i < backgrounds.length; i++)
{
var obj:Object = backgrounds[i];
if (obj.graf.x <= -obj.graf.width / 2 + obj.speed)
{
obj.graf.x = obj.X + obj.graf.width - obj.speed - obj.koef;
}
}
}
}
public function update():void
{
moveBackground();
redrawBackgrounds();
}
}
}