Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Запутался с классами, не работает dispatchEvent (http://www.flasher.ru/forum/showthread.php?t=146490)

gcolor 09.11.2010 16:50

Запутался с классами, не работает dispatchEvent
 
Привет все. Извините за длинное вступление. Просто постараюсь описать всю глубину пробелмы :eek:
Есть клас Game которому передается ссылка на stage
Код AS3:

public class Game extends Sprite
        {
                public var stageLink:Stage;
                public var gameLink:Game;
                public var main_menu_screen:MainMenu;
                public var level_select_screen:LevelSelect;
                public var game_screen:The_Game;
public function Game(_stage:Stage):void
                {
                        stageLink = _stage;
                        gameLink = this;
                        stageLink.addChild(gameLink);
....

из него вызывается клас The_Game
Код AS3:

public function play_the_game(level) {
                        game_screen = new The_Game(this,level);
                        addChild(game_screen);
                }

Далее класс The_Game
Код AS3:

public function The_Game(passed_class:Game, level:int)
                {
                        main_class = passed_class;
                        main_stage = main_class.stageLink;
//... тут добавляется на main_stage наш MovieClip
level_map = new LevelMap();
                        level_map.gotoAndStop(level);
                        addChild(level_map);
//добавляю листенер
level_map.addEventListener(floating_score.MY_EVENT2, showPopandos);
//далее добавляем очки
var new_floating_score:floating_score = new floating_score(this);
......

в конструкторе класса floating_score пишу
Код AS3:

public class floating_score extends MovieClip {
                public var dir:Number = Math.random()*6.2831853;
                public var main_class1:The_Game;
                public var money:int;
                public static const MY_EVENT2:String = "MyEvent2";
 
public function floating_score(passed_class:The_Game) {
                        main_class1 = passed_class;
                        main_class1.dispatchEvent(new Event(MY_EVENT2));
.....

По идее должна сработать функция showPopandos (в ней просто trace("я запустилась");)
Но ничего такого не происходит.
Помогите пожалуйста разобраться.

Добавлено через 5 минут
Изменил привязку листенера на такую
Код AS3:

this.addEventListener(floating_score.MY_EVENT2, showPopandos);

Теперб функция showPopandos вызывается, но вот такой кусочек кода
Код AS3:

var q:floating_score = floating_score(e.target);

не срабатывает, пишет
Ошибка типа Coercion: невозможно преобразовать The_Game@b6200b1 в floating_score

КорДум 09.11.2010 16:56

Код AS3:

main_class1.dispatchEvent(new Event(MY_EVENT2, true));

Я полагаю, так надо.

gcolor 09.11.2010 16:57

Но по идее e.target относится к классу floating_score.

Bgg 09.11.2010 16:58

Напишите классы, а не куски, иерархия у вас какая то непонятная.

gcolor 09.11.2010 16:59

Сделал так как Вы написали - функция сработала, но опять
Ошибка типа Coercion: невозможно преобразовать The_Game@b6200b1 в floating_score

TanaTiX 09.11.2010 17:01

То, что возвращает floating_score, должно быть типа floating_score

Добавлено через 1 минуту
Написал и понял, что у вас там каша еще бОльшая, чем казалось.
Назовите функции и классы по-разному. И вообще почитайте про правила именования

gcolor 09.11.2010 17:09

Класс floating_score не мой, взял его из статьи в блоге Emanuele Feronato.
Вот полный код класса
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.*;
        import flash.text.*;
        public class floating_score extends MovieClip {
                public var dir:Number = Math.random()*6.2831853;
                public var main_class1:The_Game;
                public var money:int;
                public static const MY_EVENT2:String = "MyEvent2";
 
                public function floating_score(passed_class:The_Game) {
                        money = Math.random() * 20;
                        sctext.text = String(money);
                        main_class1 = passed_class;
                        main_class1.dispatchEvent(new Event(MY_EVENT2,true));
                        addEventListener(Event.ENTER_FRAME, on_enter_frame);
 
 
                        }
                public function on_enter_frame(e:Event) {
                        x += 1*Math.cos(dir);
                        y += 1*Math.sin(dir);
                        alpha -=0.01;
                        if (alpha<=0) {
                                removeEventListener(Event.ENTER_FRAME, on_enter_frame);
                                main_class1.removescore(this);
                        }
                }
        }
}


КорДум 09.11.2010 17:17

Классы с маленькой, импорт пакетов через *, в enterFrame две лишние операции...это что за блог такой?

gcolor 09.11.2010 17:24

http://www.emanueleferonato.com/

Добавлено через 5 минут
Вопрос решен. Тема закрыта. Всем большое спасибо.

BlooDHounD 09.11.2010 21:17

Цитата:

Сообщение от gcolor
Код AS3:

public function Game(_stage:Stage):void
                {
                        stageLink = _stage;
                        gameLink = this;
                        stageLink.addChild(gameLink);


это надо в мемориз. 5 балов вам за оригинальность и извращённость.


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

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