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

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

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

Регистрация: Nov 2005
Адрес: Санкт-Петербург
Сообщений: 16
Отправить сообщение для tas с помощью Skype™
Attention MouseEvent.CLICK и глубина вложения.

Господа знатоки, решения на нашёл, пришлось думать самому.
Говорили, что в ас3 событие мыши передаёца не тока parent'у, но и child'у. На данный момент имею ситуацию, что если child'ов больше 3(вроде как...), то 4 и последующие чайлды не получают событие CLICK'a.

Структура такая:
UIComponent (aka parent)
-Sprite == getChildAt(0)
- Sprite
- Sprite
- Sprite
- Sprite
-Sprite == getChildAt(1)
- Sprite
- Sprite
- Sprite
- Sprite
-Sprite == getChildAt(2)
- Sprite
- Sprite
- Sprite
- Sprite
-Sprite == getChildAt(3)
- Sprite
- Sprite
- Sprite
- Sprite


getChildAt(1) содержит спрайты, в которых есть MovieClip's, слушающие MouseEvent.CLICK, но до них событие не доходит, хотя, если слушателей разместить в getChildAt(2) или getChildAt(3), к примеру, то всё отлично, в том числе(!!!) useHandCursor срабатывает на 2 и 3 слое, а на 1 и 2 - нет.


Слои - это слои карты (карта, нижние объекты, игроки, верхние объекты)

картый слой разбит на тайлы, к каждому тайлу привязаны свои child'ы (игроки)



mouseChildren = true, для UIComponent. Собственно, ПОМОГИТЕ_))))) умераю....))

Старый 15.06.2009, 00:02
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 2  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Событие не передается Child'ам. Событие передается от Stage до инициатора, и потом обратно на Stage.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

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

Регистрация: Nov 2005
Адрес: Санкт-Петербург
Сообщений: 16
Отправить сообщение для tas с помощью Skype™
Тогда такой вопрос - как мне сделать так, чтобы объекты в самой ж... хм... глубине таки получили событие CLICK?

Старый 15.06.2009, 00:24
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 4  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Stage
-Root
--Initiator
---SomeChild
----AssLevel

AssLevel должен подписатся на MouseEvent.CLICK событие Initiator'а.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 15.06.2009, 00:45
tas вне форума Посмотреть профиль Отправить личное сообщение для tas Найти все сообщения от tas
  № 5  
Ответить с цитированием
tas

Регистрация: Nov 2005
Адрес: Санкт-Петербург
Сообщений: 16
Отправить сообщение для tas с помощью Skype™
почему то e.target == SomeChild, но не AssLevel (
Код AS3:
GameWindow.viewPort.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void
{
Debug.trace(describeType(e.target));
});
Где viewPort == Initiator

Старый 15.06.2009, 00:47
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 6  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Кто событие инициировал тот и таргет.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 15.06.2009, 00:52
tas вне форума Посмотреть профиль Отправить личное сообщение для tas Найти все сообщения от tas
  № 7  
Ответить с цитированием
tas

Регистрация: Nov 2005
Адрес: Санкт-Петербург
Сообщений: 16
Отправить сообщение для tas с помощью Skype™
Тоесть мой MovieClip aka AssLevel не инициирует это событие, я так понимаю?

Мне важно отследить клик именно на AssLevel, а не на "высших" относительно него мувиклипах)

Добавлено через 3 минуты
опа. Нет. там даже инициатор выступает getChildAt(3), как оказалось

Старый 15.06.2009, 01:01
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 8  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Код AS3:
package
{
	import flash.display.Sprite;
	import test.Test3;
	import flash.utils.getTimer;
	import flash.events.Event;
	import flash.utils.Timer;
	import flash.text.TextField;
	import flash.events.MouseEvent;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
 
	public class Test extends Sprite
	{
		private var debugField:TextField;
 
		public function Test()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			stage.addEventListener(MouseEvent.CLICK, debugClick);
			this.addEventListener(MouseEvent.CLICK, debugClick);
			var b1:SquareButton = addChild(new SquareButton(0, 0, 150, 150, 0xFF0000, 'Red')) as SquareButton;
				b1.addEventListener(MouseEvent.CLICK, debugClick);
			var b2:SquareButton = b1.addChild(new SquareButton(50, 50, 100, 100, 0x00FF00, 'Green')) as SquareButton;
				b2.addEventListener(MouseEvent.CLICK, debugClick);
			var b3:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0x0000FF, 'Blue')) as SquareButton;
				b3.addEventListener(MouseEvent.CLICK, debugClick);
		}
 
		private function debugClick(event:MouseEvent):void
		{
			if(!debugField)
			{
				debugField = addChild(new TextField) as TextField;
				debugField.border = debugField.multiline = debugField.background = true;
				debugField.width = stage.stageWidth;
				debugField.height = stage.stageHeight - 200;
				debugField.x = 0;
				debugField.y = 200;
				debugField.text = 'Welcome' + '\r';
			}
 
			debugField.appendText('target=' + event.target + ' currentTarget=' + event.currentTarget + '\n');
		}
	}
}
 
	import flash.display.Sprite;
 
class SquareButton extends Sprite
{
	internal var id:String;
 
	function SquareButton(x:uint = 0, y:uint = 0,
						  width:uint = 20, height:uint = 20,
						  color:uint = 0xFFFFFF, id:String = null)
	{
		this.x = x;
		this.y = y;
 
		this.id = id;
 
		draw(width, height, color);
	}
 
	internal function draw(width:uint, height:uint, color:uint):SquareButton
	{
		graphics.beginFill(color);
		graphics.drawRect(0, 0, width, height);
		graphics.endFill();
 
		return this;
	}
 
	override public function toString():String
	{
		return '[SquareButton ' + id + ']';
	}
}
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 15.06.2009, 01:07
tas вне форума Посмотреть профиль Отправить личное сообщение для tas Найти все сообщения от tas
  № 9  
Ответить с цитированием
tas

Регистрация: Nov 2005
Адрес: Санкт-Петербург
Сообщений: 16
Отправить сообщение для tas с помощью Skype™
Есть мнение, что из-за того, что я в Flex-среде работаю, он своими обработчиками перебивает boobles в false...

*Тест посмотрел, работает. Видимо что-т не то.....*

Добавлено через 2 минуты
Код AS3:
                        var b1:SquareButton = addChild(new SquareButton(0, 0, 150, 150, 0xFF0000, 'Red')) as SquareButton;
				b1.addEventListener(MouseEvent.CLICK, debugClick);
			var b2:SquareButton = b1.addChild(new SquareButton(50, 50, 100, 100, 0x00FF00, 'Green')) as SquareButton;
				b2.addEventListener(MouseEvent.CLICK, debugClick);
			var b3:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0x0000FF, 'Blue')) as SquareButton;
				b3.addEventListener(MouseEvent.CLICK, debugClick);
			var b4:SquareButton = b2.addChild(new SquareButton(50, 50, 50, 50, 0xFF00FF, 'Blue2')) as SquareButton;
				b4.addEventListener(MouseEvent.CLICK, debugClick);



b3 становиться недоступной. Вот видимо почему у меня не работает... Надо придумать, как передать управление на слой ниже... Как то так %)


Последний раз редактировалось tas; 15.06.2009 в 01:11.
Старый 15.06.2009, 01:09
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 10  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Я тоже пишу в Flex, никогда в жизни он ничего не перебивал. Вообще нарисуйте диаграмму, кто кого ребенок, я не уверен что я правильно понимаю ваши объяснения, кто где.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

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

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

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


 


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


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