PDA

Просмотр полной версии : Не слушается после добавления addChild


mAK08
09.06.2013, 12:02
Здравствуйте! У меня вопрос . Мне нужно что бы при старте ролика сразу выходил символ с моей анимацией в которой есть кнопки, стоп пауза плей и тд. Также есть кнопка которая запускает этот символ. Но проблема в том что если запускаю через кнопку все норм а когда пытаюсь сразу добавить на сцену то символ запускается но не слушается... Из за чего это может быть?
Привожу код:
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 секунд
писал без компиляции

mAK08
09.06.2013, 20:33
Спасибо! Буду писать в классах...

а что означает ошибка 1061: Обращение к возможно неопределенному методу gotoAndPlay через ссылку статического типа flash.display:DisplayObject.
Это ошибка в import object

AlexCooper
09.06.2013, 20:44
это означает что нужно заменить displayObject на MovieClip. Исправил, см. выше.

mAK08
09.06.2013, 20:51
Спасибо еще раз В классах действительно удобнее. А что Означает знак доллара (в as3 в первый раз вижу) ?

AlexCooper
09.06.2013, 20:56
ничего не означает. По спецификации, Вы можете переменные хоть русскими писать. Я так помечаю переменные которые получил метод на обработку.

mAK08
09.06.2013, 21:14
Все вроде было хорошо но проблема не решилась почемуто...
Она в том что когда через кнопки загружается то все работает и кнопки проверки и анимация, а когда делаем что бы сразу подгружался то тогда он просто включается и не реагирует ни на что... Как можно это исправить?

AlexCooper
09.06.2013, 21:25
какая кнопка не работает?

mAK08
09.06.2013, 21:31
Извиняюсь за мою наглость но просто в тупике...

вот когда запускаешь swf то запускается mc который мы указали в importObject в самом начале, но у него вообще ни какие кнопки не работают ни проверка ни повтор и кстати сразу ответ показывает... А тот который потом запускается все норм...

Добавлено через 23 минуты
Странно именно тот который в начале подгружаешь тот и не работает. Может есть методы кроме addchild??

AlexCooper
09.06.2013, 21:59
Потому что писать нужно в классах. А вообще проблема из-за того что то что у Вас написано в первом кадре не успевает сработать так как вы принудительно пишете gotoAndPlay(2) где кода уже нет, потому пишите в классах! Как смотрите вложение.

AlexCooper
09.06.2013, 22:02
Что-бы Ваше приложение полноценно работало нужно по аналогии написать класс для кроссворда.

mAK08
09.06.2013, 22:10
Нереальное огромное спасибо!!!! Сам бы точно не дошел, все теперь все только в классах.
последний вопрос если можно: Никак не могу понять для чего используется Event.ADDED_TO_STAGE везде читал определение выучил но сути понять не могу для ччего?

AlexCooper
09.06.2013, 22:21
это событие просто отслеживает когда Ваш объект поместиться на сцену. Но срабатывает он единожды так как после того как событие настало мы отписуемся ( в нашем примере), нужно это для того чтобы точно знать что объект получил stage ( если таков нужен )

mAK08
09.06.2013, 22:22
Все теперь все ясно!)) спасибо еще раз)))

iNils
10.06.2013, 02:04
ничего не означает. По спецификации, Вы можете переменные хоть русскими писать. Я так помечаю переменные которые получил метод на обработку.Из описания ECMA-262:
В данном стандарте имеется единственное отклонение от стандарта Юникода: знак доллара ($) и подчёркивание (_) разрешены к использованию в любом месте идентификатора. Знак доллара предназначается только для использования в автоматически генерируемом коде.То есть использования $ в определении имен в собственном коде не рекомендуется.