Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Нужно разобраться с экземплярами мувика/класса (http://www.flasher.ru/forum/showthread.php?t=204209)

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

Код AS3:

enemyCont.getChildAt(i)["метод"]


miskalik 23.10.2013 21:38

Цитата:

Сообщение от MikroAcse (Сообщение 1149634)
Код AS3:

enemyCont.getChildAt(i)["метод"]


Спасибо, с переменной работает, а как реализовать ссылку к методу с параметрами?
например getType()..

MikroAcse 23.10.2013 21:43

Не совсем понял, но, возможно:
Код AS3:

enemyCont.getChildAt(i)["getType"]()

Ну лучше так:
Код AS3:

var enemy:MyEnemyClass = enemyCont.getChildAt(i) as MyEnemyClass;
enemy.getType();


miskalik 23.10.2013 22:01

Цитата:

Сообщение от MikroAcse (Сообщение 1149636)
Не совсем понял, но, возможно:
Код AS3:

enemyCont.getChildAt(i)["getType"]()

Ну лучше так:
Код AS3:

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

Отлично, спасибо большое за советы!

in4core 24.10.2013 03:27

Цитата:

Второй вариант лучше тем, чтобы если будет ошибка, то Вы ее увидите на этапе компиляции
Нет . ЕЕ тоже увидите в ходе работы приложения, если getChildAt(i) as MyEnemyClass - не MyEnemyClass . На нуль снизойдет и грохнется

Dukobpa3 24.10.2013 05:24

Лучше сделать какой-то словарь и туда врагов дополнительно записывать.
Брать мувик из контейнера и пытаться к нему обратиться как к енеми - не совсем хорошая идея.

Код AS3:

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. На нуль снизойдети грохнется
Разумеется. Я имел ввиду ошибки отсутствия метода или его аргументов.


Часовой пояс GMT +4, время: 01:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.