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

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

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

Регистрация: Mar 2015
Сообщений: 26
По умолчанию Пользовательские слушатели событий.

Здравствуйте, есть такой код в инициализации класса "героя":
Код AS3:
this.addEventListener(Event.ADDED_TO_STAGE, Added);
this.addEventListener(cEvents.INDEX_CHANGE, changed);
if (this.hasEventListener(cEvents.INDEX_CHANGE)) trace("have it");//проверка
//.....
private function changed(e:cEvents):void
{
	this.StageIndex = stage.getChildIndex(this);
	trace(this.StageIndex, "changed");//опять проверка (не работает. эта функция не вызывается)=(
}
В файле cEvents.as:
Код AS3:
package utils 
{
	import flash.events.EventDispatcher;
	import flash.events.Event;
	public class cEvents extends Event
	{
		public static var INDEX_CHANGE:String = "INDEX_CHANGE";
 
		public function cEvents(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			trace(type);//проверка на досягаемость этого места
			super(type, bubbles, cancelable) ;
 
		}
	}
}
В момент вызова:
Код AS3:
public function swap(e:MouseEvent):void
{
	stage.swapChildrenAt(2, 3);//пока только два
	dispatchEvent(new cEvents(cEvents.INDEX_CHANGE));
}
trace(type) из cEvents работает как надо при нажатии. Внутри же класса, который вызывает события, ничего не происходит. Может кто-то сталкивался?
Спасибо!

Старый 18.11.2015, 21:41
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А герой где лежит?
Может стоит добавить пузырьков?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 18.11.2015, 21:45
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 3  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
Каких пузырьков, как это сделать и что это даст?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Лучше ответить на первый вопрос. Метод swap чей?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 18.11.2015, 21:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Тут два варианта.
1) метод swap(e:MouseEvent) вообще не вызывается, потому что нахоидтся не в классе персонажа
2) Подписан не тот экземпляр, который шлет событие

п.с.
вот это:
Код AS3:
trace(type);//проверка на досягаемость этого места
Вообще бред. Естественно этот код сработает, если создать новое событие. Это же конструктор.
Ровно как и вот эта бессмысленная проверка
Код AS3:
this.addEventListener(cEvents.INDEX_CHANGE, changed);
if (this.hasEventListener(cEvents.INDEX_CHANGE)) trace("have it");//проверка
Конечно же слушатель будет, сразу после того как его добавили

Старый 18.11.2015, 21:48
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 6  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
метод swap находится в Main

Добавлено через 1 минуту
метод swap работает, иначе бы не менялось положение в контейнере отображаемых объектов

Старый 18.11.2015, 21:50
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от WaldeMar1321 Посмотреть сообщение
метод swap находится в Main
Что он там делает? Подписка в этом случае должна происходить не в классе героя, а к классу Main.
Здесь Main шлет событие INDEX_CHANGED. Естественно герой никак не может его услышать.

Если предположить, что герой тоже валяется в Main, и называется hero (к примеру). То, чтобы он услышал это событие, нужно сделать так:
Код AS3:
public function swap(e:MouseEvent):void
{
	stage.swapChildrenAt(2, 3);//пока только два
	hero.dispatchEvent(new cEvents(cEvents.INDEX_CHANGE));
}
Но это так же бессмысленно, потому что можно просто вызывать у героя какой-то метод.

Либо, другой вариант. В классе героя должна быть ссылка на Main, и подписка слушателя должна быть прикручена к этой ссылке
как-то так
Код AS3:
main.addEventListener(cEvents.INDEX_CHANGE, changed);
Советую почитать в справке как работают события, и погулить тоже. Так же у Колина Мука довольно неплохо описано всё

Старый 18.11.2015, 21:51
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 8  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
именно эта проверка
Код AS3:
trace(type);//проверка на досягаемость этого места
единственное что показывает что это вообще хоть как-то работает. вызывается каждый раз при нажатии.

Добавлено через 2 минуты
а в чем тогда смысл этих событий (системы событий). Один раз в теле класса прописал, и генерируй их где надо. Везде где есть нужный импорт, они должны прослушиваться.(?!!)

Старый 18.11.2015, 21:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от WaldeMar1321 Посмотреть сообщение
именно эта проверка
Код AS3:
trace(type);//проверка на досягаемость этого места
единственное что показывает что это вообще хоть как-то работает. вызывается каждый раз при нажатии.

Добавлено через 2 минуты
а в чем тогда смысл этих событий (системы событий). Один раз в теле класса прописал, и генерируй их где надо. Везде где есть нужный импорт, они должны прослушиваться.(?!!)
События в AS3 очень хорошо продуманы. Я бы сказал, одна из лучших реализаций событий, которые я встречал.
Здесь на лицо просто полное непонимание.
Еще раз повторю
Цитата:
Советую почитать в справке как работают события, и погулить тоже. Так же у Колина Мука довольно неплохо описано всё

Старый 18.11.2015, 22:08
WaldeMar1321 вне форума Посмотреть профиль Отправить личное сообщение для WaldeMar1321 Найти все сообщения от WaldeMar1321
  № 10  
Ответить с цитированием
WaldeMar1321

Регистрация: Mar 2015
Сообщений: 26
Отправить в гугл и я могу. Я два дня ищу решение, и перечитал почти все статьи и мануалы что нашел, в основном на офф сайте адоб. Как они описывали, так я и сделал. Может кто-то еще сможет помочь. Я обращаюсь сюда в крайнем случае.

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

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

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


 


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


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