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

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

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
По умолчанию Передача события дочернему объекту

Добрый день. Проблема в следующем:
Есть у меня класс обработки нажатий клавиш, который занимается тем, что выкидывает события нажатия каких-то определенных клавиш. То есть сам он отслеживает просто факт нажатия и отпускания, а диспатчит отдельные события по кнопкам (например событие StateChangeEvent.JUMP). Все эти события изначально должен был отслеживать класс, определяющий перемещения в зависимости от найденных столкновений.

Все было хорошо, пока не поменялось ТЗ и не пришлость делать факт нажатия клавиши "Выстрел" совершенно отдельно от перемещения.

Мое упрощенное решение - отслеживать нажатия клавиши "выстрел" в объекте игрока, а не в классе проверки столкновений. И, собственно, сама проблема - объект проверки нажатия клавиш по иерархии никак не связан с объектом игрока. Иерархия схематически следующая:
Название: диаграмма.png
Просмотров: 389

Размер: 9.1 Кб

Объект проверки столкновений еще меняет значение "состояние" игрока, и эта схема работала хорошо пока ТЗ не поменялось. Раньше на 3 состояния выстрела (стоя, во время ходьбы, в прыжке) отводилось три разных состояния. Сейчас состояние выстрела совершенно не зависит от того, в каком положении находится игрок.
-----------
Кто подскажет, есть ли способ передать событие вьюшке персонажа? А если нет, то может какое-то другое "архитектурное" решение есть?
Заранее спасибо

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

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Если у вас MVC (судя по вьюшкам) то все зависит от её реализации, обычно есть способы доставить инфу во вьюху, а чтобы ответить более конкретно слишком мало данных.

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Если ещё не дошли до решения, и не лень на это потратить время, накидайте немного кода с примерами, как чего вызывается. А то на картинке всяко можно нарисовать, а проблема, мне, например, не понятна.
Ну и самое банальное - нарисуйте стрелочки: Если у A есть ссылка на B, то от А к B идет стрелочка. А если A подписался на событие B, то от A к B идёт пунктирная стрелочка. Если оба друг на друга ссылаются - 2 стрелочки. Пару основных методов, которые эти актёры друг у друга вызывают напишите.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Со всеми заморочками я совсем забыл, что у меня в проверке столкновений уже есть ссылка на игрока.

Решением было просто вызвать паблик функцию игрока при получении события нажатия клавиши выстрела, без всяких новых регистраций слушателей.

НО эта проблема заставила таки подумать над идеей передачи событий дочерним объектам. То есть по сабжу

Мы можем передать событие ВНИЗ, а не на тот же уровень и не вверх? Я где-то что-то мельком видел про notifyChildren но погуглив не нашел толковых статей или ответов

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
как то все заморочено )..не проще передавать ссылку на папу по иерархии вложенности внутрь и там его обвесить слушателями?...таким образом все получаетели будут довольны...тока отписываться не забываем

Добавлено через 56 секунд
даже не так..там папа и не нужен..нужна ссылка на диспатчера нужного события..кто им будет - вам виднее.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 16.03.2013, 13:44
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Мы можем передать событие ВНИЗ, а не на тот же уровень и не вверх? Я где-то что-то мельком видел про notifyChildren но погуглив не нашел толковых статей или ответов
В одном редакторе так делал, руками, в цикле перебирал детей просто. Чтобы не делать подписку-отписку внутри детей.

Но если ребёнок - это DisplayObject, то _чаще_ проще передать ему некий объект, который содержит данные и диспетчит события при их изменении.
На ADDED_TO_STAGE подписываемся на этот объект
На REMOVED_FROM_STAGE - отписываемся.

Но если это не DisplayObject - то чтобы такое провернуть нужно _очень_ хорошо представлять, когда объект активен, а когда нет. Там уже простые решения не прокатывают, часто просто запрещается этим объектам не на что-либо подписываться

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
cleptoman, expl, спасибо за наводки, буду обрабатывать
Хотя я этот подход (вы оба описали одно и то же, как я понял), я использовал для вызова методов без наличия событий, то есть по простым условиям. Мне почему-то казалось, что такой же подход для событий - путь через забор. Надо попробовать в общем, спасибо

Старый 16.03.2013, 23:38
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Паттерн Обсервер еще посмотрите между делом.

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

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

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


 


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


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