![]() |
|
||||||||||
|
|||||
|
Здравствуйте! Написал игрушку, но она малость подтормаживает - использовал много onEnterFrame (). Хочу все переделать на setInterval (). И вот тут то застрял. Вобщем вот классы:
class Enemy {
private var enemy:MovieClip;
private static var a:Number = 0;
private var b:Number = null;
private var _mc:MovieClip;
private var n:Number;
public function Enemy (mc:MovieClip, aim:MovieClip){
_mc = mc;
b = a;
a ++;
enemy = _mc.attachMovie ("en", "en" + b, _mc.getNextHighestDepth());
enemy._x = 100;
gameOnIntervals ();
}
private function gameOnIntervals ():Void{
n = setInterval (this, "follow", 100);
}
private function follow ():Void{
enemy._y += 5;
}
}
class LevelOne{
private var _mc:MovieClip;
private var interval:Number;
private var vaweStart:Number;
private var enemy:Enemy;
public function LevelOne (mc:MovieClip){
_mc = mc;
vaweStart = _global['setTimeout'] (this,'invasion',3000);
}
private function createEnemy ():Void{
enemy = new Enemy(_mc);
}
private function invasion ():Void{
interval = setInterval (this, "createEnemy", 1000);
}
}
|
|
|||||
|
интересные грабли :
получается, что в createEnemy ты пересоздаешь свойство enemy = new Enemy(_mc);, что при этом происходит с ранее созданными объектами не вполне понятно.., видимо они уходят в небытие.. если создавать новые без привязки к enemy, то все работает зы: или по другому: если оставить LevelOne как есть, а в конструкторе Enemy сохранять ссылку на созданный объект (в статическом массиве, например), то тоже все работает Последний раз редактировалось silin; 09.04.2008 в 12:40. |
|
|||||
|
ага, не выйдет: follow не вызывается.., точнее вызывается только для последнего созданного объекта..
так думаю: в setInterval (this, "follow", 100); this - это scope вызываемой функции, а поскольку this всех создаваемых объектов в результате смотрят на один и тот же enemy экземпляра LevelOne, то и имеем этот бардак.. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Для динамических имен нельзя использовать ни var, ни типизацию.
Я выше писал о массиве, в который помещается ссылки на создаваемые экземпляры, поэтому конструкции типа this["inst"+i] в классах не нужны, а нужно лишь обратиться к элементу массива. В таком классе class A {
private var __arrayItem:/*ClassA*/Array = null;
function A () {
__arrayItem = new Array ();
}
private function create ():Void {
__arrayItem.push (new ClassA ());
}
private function test ():Void {
var len:Number = __arrayItem.length;
for (var i:Number = 0; i < len; i++) {
var item:ClassA = __arrayItem[i];
trace (item.id);
}
}
private function testForFD ():Void {
var len:Number = __arrayItem.length;
for (var i:Number = 0; i < len; i++) {
trace (__arrayItem[i].id);
}
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|