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

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

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

Регистрация: Sep 2010
Сообщений: 42
По умолчанию Вопрос по слушателю ENTER_FRAME

Привет.
Хотел задать вопрос в нубской теме, но она закрыта, поэтому спрашиваю здесь.

Начал читать книгу Foundation ActionScript 3.0 Animation: Making Things Move!. После третьей главы решил потренироваться.

Хочу, чтобы выводилось вот что. При старте есть 2 шарика. Один постоянно двигается направо. При клике мышкой должен появляться еще шарик и лететь тоже направо.

Движение одного реализовал через хендлер
Код AS3:
private function onEnterFrame(event:Event):void{
ball1.x +=1;
}
Потом сделал хендлер для обработки клика.
Код AS3:
private function onMouseClick(event:MouseEvent):void{
var tmp:Ball = new Ball(5, 0xFF0000);
addChild(tmp);
tmp.x = 50;
tmp.y = 50;
for(var i:int = 51; i < 500; i++){
tmp.x = i;
}
После запуска шарик по клику оказывался сразу справа, без движения. Почесав репу, я понял, что это из-за того, что движение не отображается ибо действие происходит вне ENTER_FRAME.

Соответственно, вопрос.
Как сделать так, чтобы движение нового шарика отображалось?

Старый 26.09.2010, 10:53
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 2  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Судя по коду вы и не пытались начать двигать новый шарик. Изменение координат нового шарика должно происходить там же в onEnterFrame.
Это можно сделать заведя массив или вектор шариков и обновлять их в onEnterFrame, или регистрировать обработчик ENTER_FRAME не для контейнера шариков, а для каждого шарика.
Пример второго способа

Код AS3:
private function onEnterFrame(event:Event):void {
	(event.target as Ball).x += 1;
}
private function onMouseClick(event:MouseEvent):void {
	var tmp:Ball = new Ball(5, 0xFF0000);
	addChild(tmp);
	tmp.x = 50;
	tmp.y = 50;
	tmp.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

Старый 26.09.2010, 15:58
randomnoob вне форума Посмотреть профиль Отправить личное сообщение для randomnoob Найти все сообщения от randomnoob
  № 3  
Ответить с цитированием
randomnoob

Регистрация: Sep 2010
Сообщений: 42
Спасибо, попробовал этот вариант. Только при дебаге выдает такую ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
ссылаяь на строку
Код AS3:
(event.target as Ball).x += 1;
При этом, если закрыть билдер, то программа вроде как работает и шарики по клику посылаются.

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Создайте массив, где будут храниться ваши шарики и в обработчике ENTER_FRAME изменяйте координаты каждого элемента (циклом for each). А при создании нового шарика добавляйте его в тот массив.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Sep 2010
Сообщений: 42
Спасибо, получилось

Старый 26.09.2010, 17:58
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 6  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Цитата:
Сообщение от randomnoob Посмотреть сообщение
Спасибо, попробовал этот вариант. Только при дебаге выдает такую ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Ошибку выдаёт потому что где-то ещё добавлен слушатель не на Ball, и приведение к типу (event.target as Ball) даёт null.
Но вариант с массивом или вектором (если нет ограничения, чтобы работала в fp9) пожалуй лучше.

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

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

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


 


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


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