Просмотр полной версии : Нужно разобраться с экземплярами мувика/класса
miskalik
23.10.2013, 21:08
Я реализовал такую модель.
Класс Game создает Timer, который вызывает функцию onTimer.
onTimer каждый раз присваивает переменной enemy новый экземпляр класса Enemy,
enemy записывается в спрайт - enemyCont.addChild(enemy)
Со временем на сцене несколько экземпляров Enemy.
Я обращаюсь к определенному экземпляру так - enemyCont.getChildAt(i)
Подскажите продвинутые программисты, все ли правильно для реализации множества врагов?
У меня не получается вызвать метод или параметр определенного экземпляра этим способом.
enemyCont.getChildAt(i).метод
MikroAcse
23.10.2013, 21:18
enemyCont.getChildAt(i)["метод"]
miskalik
23.10.2013, 21:38
enemyCont.getChildAt(i)["метод"]
Спасибо, с переменной работает, а как реализовать ссылку к методу с параметрами?
например getType()..
MikroAcse
23.10.2013, 21:43
Не совсем понял, но, возможно:
enemyCont.getChildAt(i)["getType"]()
Ну лучше так:
var enemy:MyEnemyClass = enemyCont.getChildAt(i) as MyEnemyClass;
enemy.getType();
miskalik
23.10.2013, 22:01
Не совсем понял, но, возможно:
enemyCont.getChildAt(i)["getType"]()
Ну лучше так:
var enemy:MyEnemyClass = enemyCont.getChildAt(i) as MyEnemyClass;
enemy.getType();
Функция тоже работает :)
Спасибо, узнал новое для себя.
Второй вариант будет работать в цикле таким способом?
В классе.. public var enemy:Enemy;
for(...){
enemy = enemyCont.getChildAt(i) as Enemy;
enemy.getType();
}
MikroAcse
23.10.2013, 22:17
Именно.
Второй вариант лучше тем, чтобы если будет ошибка, то Вы ее увидите на этапе компиляции, а не во время выполнения приложенияю
Оффтоп: оформляйте код в теги, для этого достаточно выделить его и нажать на кнопку AS3 над полем ввода.
miskalik
23.10.2013, 22:50
Отлично, спасибо большое за советы!
Второй вариант лучше тем, чтобы если будет ошибка, то Вы ее увидите на этапе компиляции
Нет . ЕЕ тоже увидите в ходе работы приложения, если getChildAt(i) as MyEnemyClass - не MyEnemyClass . На нуль снизойдет и грохнется
Dukobpa3
24.10.2013, 05:24
Лучше сделать какой-то словарь и туда врагов дополнительно записывать.
Брать мувик из контейнера и пытаться к нему обратиться как к енеми - не совсем хорошая идея.
private var enemies:Vector.<Enemy>;
//******************
private function onTimer(event:Event):void {
enemyCont.addChild(enemy);
enemies.push(enemy);
}
//*************
enemies[i].method();
MikroAcse
24.10.2013, 09:46
Нет . ЕЕ тоже увидитев ходе работы приложения, еслиgetChildAt(i) as MyEnemyClass- не MyEnemyClass. На нуль снизойдети грохнется
Разумеется. Я имел ввиду ошибки отсутствия метода или его аргументов.
miskalik
24.10.2013, 15:20
Лучше сделать какой-то словарь и туда врагов дополнительно записывать.
Брать мувик из контейнера и пытаться к нему обратиться как к енеми - не совсем хорошая идея.
Вариант интересный.
Я удаляю объект таким способом:
enemyCont.removeChildAt(i);
Каким методом можно удалить i-ый элемент из Вектора
Dukobpa3
24.10.2013, 15:53
Vector#slice() (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/Vector.html#slice())
Vector#splice() (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/Vector.html#splice())
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.