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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.11.2011, 14:06
KOCTuK вне форума Посмотреть профиль Отправить личное сообщение для KOCTuK Найти все сообщения от KOCTuK
  № 1  
Ответить с цитированием
KOCTuK
[+1.3 18.04.11]

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

Доброго времени суток.
Столкнулся с такой ситуацией:
есть массив объектов;
в цикле его перебираю и определяю кратчайший путь (через собственный класс основанный на А*) до определенной точки;
определение пути срабатывает только для первого объекта цикла (весь цикл пробегает быстрее чем класс успевает вернуть результат);
вижу решение в добавлении события окончания расчета в классе, но не могу заставить возвращать событие.
Во флэше новичек, ваяю на AS3.
Читал: http://www.flasher.ru/forum/showthread.php?t=79874

кусочек кода:
Код AS3:
package path_classes
{
	import flash.events.Event;
	import flash.events.EventDispatcher;	
 
	public class PathLookup extends EventDispatcher{
             public static function findPath(source:Point, target:Point):Object
		{
		     dispatchEvent(new Event(Event.COMPLETE));
		     return path;
                }
***********************
во флэшке пишу:
Код AS3:
PathLookup.addEventListener(Event.COMPLETE, onPathFounded);
ошибка при компиляции: Переменная dispatchEvent не определена.

Помогите добрым советом. Может как-то можно заставить дожидаться окончания метода класса не прибегая к таймерам? Или событие докавырять?

Старый 03.11.2011, 14:07
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
PathLookup - экземпляр класса
public static function findPath - статическая функция!
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 03.11.2011, 14:15
KOCTuK вне форума Посмотреть профиль Отправить личное сообщение для KOCTuK Найти все сообщения от KOCTuK
  № 3  
Ответить с цитированием
KOCTuK
[+1.3 18.04.11]

Регистрация: Nov 2008
Сообщений: 8
Цитата:
Сообщение от Genzo Посмотреть сообщение
PathLookup - экземпляр класса
public static function findPath - статическая функция!
Не могли бы вы подробнее объяснить вашу мысль.
PathLookup extends EventDispatcher, от этого PathLookup стал экземпляром?

Старый 03.11.2011, 14:19
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 4  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Не правильно сначала прочитал ваш код, вы не можете на статический объект добавить слушатель, т.к. для этого требуется экземпляр.
Код AS3:
public function dispatchEvent(event:Event):Boolean
Код AS3:
package path_classes
{
	import flash.events.Event;
	import flash.events.EventDispatcher;	
 
	public class PathLookup extends EventDispatcher{
             public unction findPath(source:Point, target:Point):Object
		{
		     dispatchEvent(new Event(Event.COMPLETE));
		     return path;
                }
 
//****
 
var pl:PathLookup = new PathLookup(/*PARAMS??*/);
pl.addEventListener(Event.COMPLETE, onPathFounded);
pl.findPath(/**/);
Добавлено через 2 минуты
есть еще вариант передавать параметром callback-функцию, например :

Код AS3:
package path_classes
{
 
	public class PathLookup{
             public static function findPath(source:Point, target:Point , callBack:Function):void
		{
		     callBack(path);
                }
 
 
//****
PathLookup.findPath(p1,p2,this.onPathFounded);
 
private function onPathFounded(path:Object):void
{
 
}
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.


Последний раз редактировалось Genzo; 03.11.2011 в 14:23.
Старый 03.11.2011, 14:23
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 5  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Нужно:
Код AS3:
public function findPath(source:Point, target:Point):Object
		{
		     dispatchEvent(new Event(Event.COMPLETE));
		     return path;
                }
Без static. Или:
Код AS3:
public static var instance: PathLookup = new PathLookup();
..
instance.dispatchEvent(new Event(Event.COMPLETE));
 
..
PathLookup.instance.addEventListener(...
Добавлено через 58 секунд
Да колбек здесь как раз самое то.
__________________
http://www.chessmax.ru

Старый 03.11.2011, 14:26
KOCTuK вне форума Посмотреть профиль Отправить личное сообщение для KOCTuK Найти все сообщения от KOCTuK
  № 6  
Ответить с цитированием
KOCTuK
[+1.3 18.04.11]

Регистрация: Nov 2008
Сообщений: 8
Цитата:
Сообщение от Genzo Посмотреть сообщение
вы не можете на статический объект добавить слушатель
Золотые слова, спасибо! Ваше конфу несравненно сильнее моего)

Добавлено через 5 часов 35 минут
Такс, все равно не получилось сделать толково. Что-то видимо я не понимаю.
Есть ли какой-то вариант поиска пути для массива объектов до заданной точки? Я перебираю массив циклом и запускаю процедуру обнаружения пути. Даже если в колбаке повышаю цикловую переменную, функция не успевает вернуть результат.

Добавлено через 5 часов 40 минут
...попробую пока переписать нахождение пути для массива findPath(source:Array, target:Point):Object

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

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

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


 


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


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