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

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

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

Регистрация: Jun 2010
Сообщений: 6
По умолчанию Проблема со слушателем клавиатуры

Всем добрый день.
Собственно изучаю AS3 на основе нескольких скачаных уроков, в процессе создания приложения вылезла ошибка. Исходник прилагается.
Суть ошибки - в файле keys.as в строках 10-11 не знаю как правильно подойти к прослушивателям событий, ибо первоначальный вариант(оставил в комментариях к коду) со stage выдаёт null(точнее Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null").
Вложения
Тип файла: rar bp3.rar (25.5 Кб, 44 просмотров)


Последний раз редактировалось Triton36; 28.06.2010 в 14:35.
Старый 28.06.2010, 15:03
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Ну, как бы, все верно и stage здесь и не нужен. При таком раскладе все работает без проблем? Я проверить не могу, ибо IDE заболела и из вредности отказывается вкомпиливать классы и трейсить. Бегло просмотрел код, ошибок не заметил, но у вас на ball нет фокуса, оттого он и не получает событие.
И да, у вас все в классах, что не может не радовать глаз после вопросов о кадрах. Но используйте типизацию переменных. Нормальный компилятор такое даже не скомпилит. Затем конструкторы пишутся с Большой Буквы, а в конце вызова конструктора принято писать круглые скобки, все же это вызов метода. И еще одно - как добавляете что-то на сцену, лучше в конструкторе (объекта gg в данном случае) прописать слушателя Event.ADDED_TO_STAGE, тогда и стейдж будет у него определен.
__________________
тут я


Последний раз редактировалось КорДум; 28.06.2010 в 15:18.
Старый 28.06.2010, 16:05
Triton36 вне форума Посмотреть профиль Отправить личное сообщение для Triton36 Найти все сообщения от Triton36
  № 3  
Ответить с цитированием
Triton36

Регистрация: Jun 2010
Сообщений: 6
Вот основная поблема в том, что реакция на событие

keys.as
Код AS3:
 
movieclip.addEventListener(KeyboardEvent.KEY_DOWN, key_down); //изначально было movieclip.stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
не наступает.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Я же сказал, что у вас нет фокуса на объекте, прочитайте про фокус.
__________________
тут я

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

Регистрация: Jun 2010
Сообщений: 6
Наверно я скажу глупость, но лучше всё же уточнить.
Программно фокус ставится
Код AS3:
var что-то:как-то = new нечто;
addChild(что-то); 
stage.focus = что-то;
Т.е. на экземпляр класса. ball у меня главный класс, собственных экземпляров не имеет, значит появляется дополнительная проблема. Или можно ещё как-то присвоить к фокусу? Или имелось ввиду иное?


Последний раз редактировалось Triton36; 28.06.2010 в 17:26.
Старый 28.06.2010, 17:40
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Самое простое - подписаться в классе gg на ADDED_TO_STAGE, затем приписать в том же классе
Код AS3:
stage.focus = this;
Добавлено через 2 минуты
Код AS3:
var ball:gg = new gg();
addChild(ball); 
stage.focus = ball;
А вообще так в главном классе нужно.
__________________
тут я

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

Регистрация: Jun 2010
Сообщений: 6
Заветная жёлтая рамка появилась вокруг шарика(gg который). Однако на команды с клавиатуры всё также не отвечает.


Последний раз редактировалось Triton36; 28.06.2010 в 19:10.
Старый 28.06.2010, 21:10
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Где вы такие уроки нашли, что вся логика нелогично и нерационально разнесена в классах? Я переделал для FD, закомментил ненужности и выяснил, что слушатели клавиатуры не вешаются на нужный объект, хотя по коду, вроде бы, на него вешается (я еле-еле разобрался в разноименных переменных, являющимися ссылками на одни и те же объекты, когда можно использовать одну статическую ссылку (синглтон так синглтон)). Парадокс. Необходимо срочно рационально структурировать весь код, поубирать дубликаты ссылок и вместо флешного твина обратить внимание на Tween Max/Lite.
__________________
тут я

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

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

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


 


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


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