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

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

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

Регистрация: Oct 2010
Сообщений: 2
По умолчанию Обработка события размещенного в контейнер

Доброе время суток.

Хотел бы задать следующие вопросы.

Есть класс, объект которого, по достижению некоторого условия, должен удаляться со сцены.
Код AS3:
package by.me
{
	...
	public class Coin extends Sprite
	{
		...
		private var _mainContainer:Object3DContainer;
 
		public function Coin(mainContainer:Object3DContainer) 
		{
			super();
			this._mainContainer = mainContainer;
			...
			this._mainContainer.addEventListener(Coin.CHECK, onCheck);
		}
		private function onCheck(e:Event):void
		{
			if (this._body.z < -500) this.remove();
		}
		private function remove():void
		{
			this._mainContainer.removeEventListener(Coin.CHECK, onCheck);
			this._mainContainer.dispatchEvent(new Event(Coin.REMOVE));
		}
	}
}
Есть соответственно класс, в котором создаются эти коины.
Код AS3:
package by.me
{
	import by.me.Coin;
	...
	public class MyPhysics extends Alternativa3dPhysics
	{
		private var _mainContainer:Object3DContainer;
		private var coinsVector:Vector.<Coin>;
		...
 
		public function MyPhysics(mainContainer:Object3DContainer) 
		{
			this._mainContainer = mainContainer;
			super(this._mainContainer, MyPhysics.SPEED);
			coinsVector = new Vector.<Coin>();
			this._mainContainer.addEventListener(Coin.REMOVE, onCoinRemove);
		}
		public function fillWithCoins():void
		{
			for (var i:uint = 0; i < 4; i++)	{
				for (var j:uint = 0; j < 2; j++)	{
					coinsVector[i] = new Coin(this._mainContainer);
					...
				}
			}
		}
		private function onCoinRemove(e:Event):void
		{
			var i:uint;
			i = coinsVector.indexOf(e.target);
			removeBody(coinsVector[i]._body);
			coinsVector.splice(i, 1);
		}
	}
}
На данный момент, на функции удаления монетки из вектора, я в e.target и в e.currentTarget получаю null. Поэтому в i у меня 0xffffff, в общем ничего хорошего из этого не выходит, так как удалять нечего. При этом сам объект пока никуда не делся.

Функция onCheck вызывается следующим образом:
Код AS3:
	this._mainContainer.dispatchEvent(new Event(Coin.CHECK));
через каждые 40 OnEnterFrame'ов.



Вопросы:
1) Почему передаются null, как исправить.
2) Стоит ли переделывать через DataEvent, передавая в ней какой-нибудь идентификатор, this.name, к примеру.
3) Стоит ли проверку вообще проводить внутри самого объекта, может правильнее проверять весь вектор в MyPhysics.


Последний раз редактировалось HoneyBunny.; 30.09.2011 в 12:56.
Старый 30.09.2011, 07:13
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Трейсы уже не в моде?

Функция заполнения вектора монетками-то есть, а где она вызывается не вижу.

Старый 30.09.2011, 11:06
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 3  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
null попробуйте исправить, заменив

Код AS3:
this._mainContainer.addEventListener(Coin.REMOVE, onCoinRemove);
на

Код AS3:
this._mainContainer.addEventListener(Coin.REMOVE, onCoinRemove, true);
2) - Не критично

3)Стоит, т.к. в таком случае фаша функция переносима и может быть применена в любом другом классе, где нет вектора.

P.S Почита

Старый 30.09.2011, 12:53
HoneyBunny. вне форума Посмотреть профиль Отправить личное сообщение для HoneyBunny. Найти все сообщения от HoneyBunny.
  № 4  
Ответить с цитированием
HoneyBunny.

Регистрация: Oct 2010
Сообщений: 2
@goodguy - trace в моде, просто как и многое другое были убраны из цитируемого кода, как не важное, для читабельности.

@tofflife - спасибо, по поводу UseCapture=true, помогло, пойду читать что и почему. Ну а потом переделаю по пункту 3.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Если разберетесь - отпишитесь сюда, пожалуйста. Мне очень интересно, как может быть target/currentTarget = null, и как в capture-phase это исправляется.

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

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

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


 


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


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