Форум 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=179841)

Tetraeon 22.05.2012 21:22

Всплывающие текстовые поля для экземпляров класса
 
Здравствуйте.
Всем наверняка знакомы циферки жизни вылетающие из врагов если по ним бьют... вот это цель которую я никак не могу достичь уже неделю.. вся загвоздка в том что для экземпляров класса врага addChild любого MovieClip'а будит производится только 1 раз(вылетит 1 объект 1 раз). И не понятно как текстовое поле которое в последствии будит принимать значение переменной внедрить в код. Ищу любую помощь по этому вопросу.
Заранее спасибо.

Aquahawk 22.05.2012 21:38

Цитата:

для экземпляров класса врага addChild любого MovieClip'а будит производится только 1 раз
это почему?

Tetraeon 22.05.2012 22:05

Не знаю, вот элемент кода где прописан addChild на ряду с trace, который выводится многократно.
Код AS3:

public function hPC(e:Event):void {
        if (hP<hPT) {
                trace ("урон",hPT-hP);
                addChild(sw);
                enemy.HpBar.gotoAndStop(Math.floor(hP/maxHP*100));
        }
        removeEventListener (Event.ENTER_FRAME , hPC);
        hPT=hP;
        addEventListener (Event.ENTER_FRAME , hPC);
}


strangedk 22.05.2012 23:48

Код AS3:

removeEventListener (Event.ENTER_FRAME , hPC);
hPT=hP;
addEventListener (Event.ENTER_FRAME , hPC);

Это еще что за магия?

у вас каждый раз addChild(sw) происходит, зачем это? просто добавьте однажды sw, и обновляйте через sw.text = "...";

Tetraeon 23.05.2012 03:01

С задачей справился... но вот как раз вопрос про addChild остался, вроде бы по другому никак не получится создать всплывающий текст для разных экземпляров класса. Ведь надо по каждому событию что бы появлялась табличка с числом. Если я что то не так понял поправьте.

Вопрос у меня касательно оптимизации процесса, я так понимаю все созданные Child'ы никуда не пропадают.. просто по завершению ролика последний кадр текстового поля с строчкой stop(); прекращает воспроизведение. Как же по убирать накопившиеся Child'ы? Например поставить счетчик этих созданий и по достищению 1000 обнулить sw = null; ? Как же возобновить процесс? После обнуления идет ошибка, мол ссылается на объект null.

strangedk 26.05.2012 15:29

Я повторюсь, зачем каждый раз делать addChild

Либо пусть текстовое поле присутствует постоянно, и обновляйте значение sw.text
Либо при необходимости делайте addChild(sw), и потом по таймеру делайте removeChild(sw)

Код AS3:

// при добавлении проверяйте, нет ли уже такого объекта на сцене
if (sw && !contains(sw)) {
    addChild(sw)
}
 
// при удалении проверка на null и на то что объект добавлен
if (sw && contains(sw)) {
    removeChild(sw)
}

...и у вас каждый раз будет только один объект.

expl 26.05.2012 16:08

Цитата:

Сообщение от strangedk (Сообщение 1081489)
Я повторюсь, зачем каждый раз делать addChild
Код AS3:

// при добавлении проверяйте, нет ли уже такого объекта на сцене
if (sw && !contains(sw)) {
    addChild(sw)
}
 
// при удалении проверка на null и на то что объект добавлен
if (sw && contains(sw)) {
    removeChild(sw)
}


С таким использованием contains мы пару раз огребли, пока не прочитали справку:
Код:

Определяет, является ли указанный объект отображения
дочерним объектом экземпляра DisplayObjectContainer или самим экземпляром.
Область поиска охватывает весь список отображения, включая данный
экземпляр DisplayObjectContainer.
Нижестоящие элементы второго,
третьего и последующих уровней возвращают значение true.

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

if (sw && sw.parent != this) {
    addChild(sw);
}
if (sw && sw.parent == this) {
    removeChild(sw);
}


strangedk 26.05.2012 16:34

я не очень понял о чем, с какими проблемами вы столкнулись?

expl 26.05.2012 16:43

Например есть container, в котором лежит subcontainer. И по каким-то причинам child переместили из containre в subcontainer (Вы, конечно скажете, что это маловероятно - но мы натыкались пару раз и очень мучительно искали ошибку)
Если сделать так:
Код AS3:

if (container.contains(child))
{
    container.removeChld(child);
}

то в этом конкретном случае флешка упадет - ведь child находится в subcontainer.

strangedk 26.05.2012 16:49

Понял. Спасибо вам, ценное замечание.


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

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