Вы так не делаете.Динамический - это позволяет вам добавить любое специальное свойство, которое еще не объявлено, чтобы не переопределять уже объявленные функции.Динамическое не следует путать с абстрактным.
Попробуйте что-то вроде этого вместо
public class Bullet extends Sprite{
public var speedX = 5;
public var speedY = 5;
public function update():void{
x += speedX;
y += speedY;
}
}
public class BulletFactory{
public static function getFastBullet():Bullet{
var result:Bullet = new Bullet();
result.speedX = result.speedY = 10;
return result;
}
}
Настройте публичную / приватную видимость speedX / speedY по своему вкусу.
Еслис другой стороны, вы хотите «динамически переопределить функцию» в буквальном смысле, насколько это возможно, всегда есть это (что смешно, но верно).
public class AbstractBullet extends Sprite{
public var update:Function; // <- Notice that function is just a variable here.
}
Затем в вашей фабрике маркеров вы можете назначитьфункция обновления на разовой основе.Обратите внимание, что это менее «безопасно», поскольку вы теряете все представления о безопасности типов, поскольку обновление больше не имеет установленной подписи.Вы также должны убедиться, что он существует, прежде чем позвонить.Вы должны сделать проверку нуля явной, если хотите избежать предупреждения компилятора.
var f:Function;
// this is fine.
// it's particularly safe if
// f is a declared variable of type
// Function.
if(f != null) f();
// this is also fine,
// and is preffered if f is NOT
// a defined variable but instead
// a dynamically created (and therefore
// untyped) variable of a dynamic object.
// You would not want to "call" something
// that is not a function, after all.
if(f is Function) f();
// but this gives a warning
// even though the code works
// correctly at runtime.
if(f) f();