Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2010, 16:50
gcolor вне форума Посмотреть профиль Отправить личное сообщение для gcolor Найти все сообщения от gcolor
  № 1  
Ответить с цитированием
gcolor

Регистрация: Nov 2010
Сообщений: 9
По умолчанию Запутался с классами, не работает dispatchEvent

Привет все. Извините за длинное вступление. Просто постараюсь описать всю глубину пробелмы
Есть клас 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


Последний раз редактировалось gcolor; 09.11.2010 в 17:04.
Старый 09.11.2010, 16:56
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
main_class1.dispatchEvent(new Event(MY_EVENT2, true));
Я полагаю, так надо.
__________________
тут я

Старый 09.11.2010, 16:57
gcolor вне форума Посмотреть профиль Отправить личное сообщение для gcolor Найти все сообщения от gcolor
  № 3  
Ответить с цитированием
gcolor

Регистрация: Nov 2010
Сообщений: 9
Но по идее e.target относится к классу floating_score.

Старый 09.11.2010, 16:58
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Напишите классы, а не куски, иерархия у вас какая то непонятная.

Старый 09.11.2010, 16:59
gcolor вне форума Посмотреть профиль Отправить личное сообщение для gcolor Найти все сообщения от gcolor
  № 5  
Ответить с цитированием
gcolor

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

Старый 09.11.2010, 17:01
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 6  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
То, что возвращает floating_score, должно быть типа floating_score

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

Старый 09.11.2010, 17:09
gcolor вне форума Посмотреть профиль Отправить личное сообщение для gcolor Найти все сообщения от gcolor
  № 7  
Ответить с цитированием
gcolor

Регистрация: Nov 2010
Сообщений: 9
Класс 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
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Классы с маленькой, импорт пакетов через *, в enterFrame две лишние операции...это что за блог такой?
__________________
тут я

Старый 09.11.2010, 17:24
gcolor вне форума Посмотреть профиль Отправить личное сообщение для gcolor Найти все сообщения от gcolor
  № 9  
Ответить с цитированием
gcolor

Регистрация: Nov 2010
Сообщений: 9
http://www.emanueleferonato.com/

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

Старый 09.11.2010, 21:17
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Цитата:
Сообщение от gcolor
Код AS3:
public function Game(_stage:Stage):void
		{
			stageLink = _stage;
			gameLink = this;
			stageLink.addChild(gameLink);
это надо в мемориз. 5 балов вам за оригинальность и извращённость.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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