Просмотр полной версии : Не слушается после добавления addChild
Здравствуйте! У меня вопрос . Мне нужно что бы при старте ролика сразу выходил символ с моей анимацией в которой есть кнопки, стоп пауза плей и тд. Также есть кнопка которая запускает этот символ. Но проблема в том что если запускаю через кнопку все норм а когда пытаюсь сразу добавить на сцену то символ запускается но не слушается... Из за чего это может быть?
Привожу код:
var mc_M:MC_M = new MC_M;
var mc_5:MC_5 = new MC_5;
addChild(mc_M);
mc_M.gotoAndPlay(2);
mc_M.x = 399,5;
mc_M.y = 277,95;
B5.addEventListener(MouseEvent.CLICK,onClickB5);
function onClickB5 (e:Event):void {
if (this.contains(mc_M)){
removeChild(mc_M);
mc_M.stop();
}
addChild(mc_5);
mc_5.gotoAndPlay(2);
mc_5.x = 399,5;
mc_5.y = 277,95;
}
B6.addEventListener(MouseEvent.CLICK,onClickB6);
function onClickB6 (e:Event):void {
if (this.contains(mc_5)){
removeChild(mc_5);
mc_5.stop();
}
addChild(mc_M);
mc_M.gotoAndPlay(2);
mc_M.x = 399,5;
mc_M.y = 277,95;
}
AlexCooper
09.06.2013, 14:16
Ваш код очень плохо читается. Учитесь сразу писать в классах. Могу лишь предположить что при инициализации ролика на сцене еще нет объектов которые вы пытаетесь подписать слушателем.
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class MyClass extends MovieClip {
private var mc_m:MC_M;
private var mc_5:MC_5;
public function MyClass() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
mc_M = new MC_M;
mc_5 = new MC_5;
importObject(mc_M);
B5.addEventListener(MouseEvent.CLICK,onClickHandler);
B6.addEventListener(MouseEvent.CLICK,onClickHandler);
}
private function onClickHandler(event:MouseEvent):void {
switch (event.currentTarget.name) {
case 'B5'
removeObject(mc_M);
importObject(mc_5);
break;
case 'B6'
removeObject(mc_5);
importObject(mc_M);
break;
default: trace('OMG');
}
}
private function importObject($clip:MovieClip):void {
$clip.gotoAndPlay(2);
$clip.x = 400;
$clip.y = 278;
addChild($clip);
}
private function removeObject($clip:MovieClip):void {
if (this.contains($clip))
{
$clip.stop();
removeChild($clip);
}
}
}
}
Добавлено через 30 секунд
писал без компиляции
Спасибо! Буду писать в классах...
а что означает ошибка 1061: Обращение к возможно неопределенному методу gotoAndPlay через ссылку статического типа flash.display:DisplayObject.
Это ошибка в import object
AlexCooper
09.06.2013, 20:44
это означает что нужно заменить displayObject на MovieClip. Исправил, см. выше.
Спасибо еще раз В классах действительно удобнее. А что Означает знак доллара (в as3 в первый раз вижу) ?
AlexCooper
09.06.2013, 20:56
ничего не означает. По спецификации, Вы можете переменные хоть русскими писать. Я так помечаю переменные которые получил метод на обработку.
Все вроде было хорошо но проблема не решилась почемуто...
Она в том что когда через кнопки загружается то все работает и кнопки проверки и анимация, а когда делаем что бы сразу подгружался то тогда он просто включается и не реагирует ни на что... Как можно это исправить?
AlexCooper
09.06.2013, 21:25
какая кнопка не работает?
Извиняюсь за мою наглость но просто в тупике...
вот когда запускаешь swf то запускается mc который мы указали в importObject в самом начале, но у него вообще ни какие кнопки не работают ни проверка ни повтор и кстати сразу ответ показывает... А тот который потом запускается все норм...
Добавлено через 23 минуты
Странно именно тот который в начале подгружаешь тот и не работает. Может есть методы кроме addchild??
AlexCooper
09.06.2013, 21:59
Потому что писать нужно в классах. А вообще проблема из-за того что то что у Вас написано в первом кадре не успевает сработать так как вы принудительно пишете gotoAndPlay(2) где кода уже нет, потому пишите в классах! Как смотрите вложение.
AlexCooper
09.06.2013, 22:02
Что-бы Ваше приложение полноценно работало нужно по аналогии написать класс для кроссворда.
Нереальное огромное спасибо!!!! Сам бы точно не дошел, все теперь все только в классах.
последний вопрос если можно: Никак не могу понять для чего используется Event.ADDED_TO_STAGE везде читал определение выучил но сути понять не могу для ччего?
AlexCooper
09.06.2013, 22:21
это событие просто отслеживает когда Ваш объект поместиться на сцену. Но срабатывает он единожды так как после того как событие настало мы отписуемся ( в нашем примере), нужно это для того чтобы точно знать что объект получил stage ( если таков нужен )
Все теперь все ясно!)) спасибо еще раз)))
ничего не означает. По спецификации, Вы можете переменные хоть русскими писать. Я так помечаю переменные которые получил метод на обработку.Из описания ECMA-262:
В данном стандарте имеется единственное отклонение от стандарта Юникода: знак доллара ($) и подчёркивание (_) разрешены к использованию в любом месте идентификатора. Знак доллара предназначается только для использования в автоматически генерируемом коде.То есть использования $ в определении имен в собственном коде не рекомендуется.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.