Доброго времени суток.
Появился такой вопрос при создании игрушки (использую FlashPunk, если что):
как по-человечески реализовать вызов функции одного класса на действие другого?
К примеру есть у нас мир, внутри него создается наш персонаж и при нажатии на клавишу должна создаваться пуля.
(Далее аналогично каждый новый объект должен будет обращаться к экземпляру xmlsocket чтобы отправить инфоормацию и принять)
Мой вариант с созданием пули:

Код AS3:
package
{
import flash.events.Event;
import net.flashpunk.World;
public class Earth extends World
{
public var hero:Hero;
public function Earth()
{
hero=new Hero;
hero.SD.addEventListener(ShotDispatcher.SHOT, shotListener);
add(hero);
add(new Tile);
}
public function shotListener(e:Event):void
{
add(new Bullet(hero.x, hero.y, hero.getAngle()));
}
}
}

Код AS3:
package
{
import flash.events.*;
import net.flashpunk.Entity;
import net.flashpunk.FP;
import net.flashpunk.graphics.Image;
import net.flashpunk.masks.Hitbox;
import net.flashpunk.utils.Input;
import net.flashpunk.utils.Key;
public class Hero extends Entity
{
[Embed(source='image/tank1.png')]
private const PLAYER:Class;
public var movearrow:String="";
public var SD:ShotDispatcher;
public function Hero()
{
graphic=new Image(PLAYER);
Image(graphic).centerOrigin();
x=35;
y=35;
layer=20;
setHitbox(31, 31, 0, 0);
type="player";
SD=new ShotDispatcher();
}
override public function update():void
{
if (Input.pressed(Key.SPACE))
{
SD.doit();
}
}
}
}

Код AS3:
package
{
import flash.events.*;
public class ShotDispatcher extends EventDispatcher
{
public static const SHOT:String="pew";
function ShotDispatcher()
{
trace("I did it!");
doit();
}
public function doit():void
{
dispatchEvent(new Event(ShotDispatcher.SHOT));
}
}
}
есть какое-то ощущение что делается это как-то проще? есть какие-нибудь советы?