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

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

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

Регистрация: Oct 2007
Сообщений: 45
По умолчанию Проблема с dispatchEvent и event.stageX

Добрый день всем.

Возникла такая проблема - делаю туториал для игры. Чтобы залочить все элементы интерфейса - сделал прозрачный MovieClip, на который повесил листнер на все основные события мыши.
Соответственно в обработчике проверяю какое действие разрешено и вызываю событие для необходимых объектов.

Есть класс - игровое поле, который обрабатывает событие мыши - и по координатам вычисляет положение строящегося здания. Для расчетов используется event.stageX

Прозрачная заслонка имеет меньшие размеры, чем игровое поле. По событию мыши я просто делаю вызов
Код AS3:
public function mouseEventDispatcher(event:MouseEvent = null){
	_city.dispatchEvent(event);
}
При этом event.stageX отличается от того, если бы событие отлавливал объект _city

Почему stageX и stageY отличаются при срабатывании события на разных объектах?

Причем пересоздать event с новыми stageX и stageY не получится.

Может кто подскажет что можно в данном случае придумать?
как поменять у события target я тоже так и не понял, хотя мне кажется, что именно от target все и зависит.

Старый 23.08.2011, 17:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
интересная штука получается
и вот ведь что удивительно: localX передиспатченного события совпадает со stageX оригинального о_О
Код AS3:
public class Main extends Sprite
{
	private var child:Sprite = new Sprite();
 
	public function Main():void
	{
		child.graphics.beginFill(0xC0C0C0);
		child.graphics.drawRect(0, 0, 200, 200);
		//child.scaleX = 0.5;
		child.x = 200;
 
		addChild(child);
		child.addEventListener(MouseEvent.CLICK, child_click);
		stage.addEventListener(MouseEvent.CLICK, stage_click);
	}
 
	private function stage_click(e:MouseEvent):void
	{
		trace("Main.stage_click > e.stageX : " + e.stageX);
		child.dispatchEvent(e);
 
	}
 
	private function child_click(e:MouseEvent):void
	{
		trace("Main.child_click > e.localX : " + e.localX);
		trace("Main.child_click > e.stageX : " + e.stageX);
		e.stopPropagation();
	}
}
>>что можно в данном случае придумать?
по простому stage.mouseX, не ?

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

Регистрация: Oct 2007
Сообщений: 45
Цитата:
Сообщение от silin Посмотреть сообщение
интересная штука получается
и вот ведь что удивительно: localX передиспатченного события совпадает со stageX оригинального о_О

>>что можно в данном случае придумать?
по простому stage.mouseX, не ?
Спасибо! Действительно - есть же stage.mouseX.
А вообще - удивительно, получается действительно, у клонов событий мыши координаты стейджа отличаются от оригинала. Как будто у этих событий разные стейджи.

Цитата:
stageX Горизонтальная координата события в глобальных координатах рабочей области.

То есть вы получаете координаты не в зависимости на чём кликнули, а в зависимости от того где.
У события "таргет" менять не получится. Да это и не нужно, по определению. Что то криво с архитектурой
если вы нуждаетесь в такой возможности.
Да - согласен, что замена таргета - это уже извращение. Просто пытался разобраться в проблеме. А кроме координат StageX и StageY у событий отличались и target.

Разобрался с проблемой.
Всем спасибо за помощь!


Последний раз редактировалось dimarik; 24.08.2011 в 11:38. Причина: Избыточное цитирование
Старый 23.08.2011, 17:50
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 4  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
stageX Горизонтальная координата события в глобальных координатах рабочей области.

То есть вы получаете координаты не в зависимости на чём кликнули, а в зависимости от того где.
У события "таргет" менять не получится. Да это и не нужно, по определению. Что то криво с архитектурой
если вы нуждаетесь в такой возможности.

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

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

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


 


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


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