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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.02.2011, 02:14
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 1  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
По умолчанию Как "обмануть" события?

Возникла странная проблема. Делаю проект в PaperVision. Подписываю объекты на сцене на MOUSE_OVER, MOUSE_OUT. Но, например, при попадании мышки на объект эти два события (MOUSE_OVER, MOUSE_OUT) вызываются сразу друг за другом 2-3раза подряд(хотя на самом деле событие MOUSE_OUT даже не происходило), что мне, конечно, не нужно. Все пересмотрел, ошибки вроде нигде нету. Просто я там намудрил много чего, думаю из-за этого что-то ПэперВижион тупит.

Так вот вопрос. Так как ошибку найти не могу, то как сделать так, чтобы события не срабатывали несколько раз друг за другом?(то есть как бы обмануть события). То есть, чтобы MOUSE_OVER и MOUSE_OUT срабатывали только тогда, когда они на самом деле происходят. Я уже и логические переменные использовал и таймеры ставил, но так оптимального решения не нашел.

ЗЫ: Надеюсь вы поняли и представляете, о чем я говорю

Старый 28.02.2011, 02:20
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 2  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
События ROLL_OVER/ROLL_OUT ведут себя также?
__________________
Нормально делай — нормально будет!

Старый 28.02.2011, 02:23
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 3  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Полностью аналогично. Я пытался таймером исправить это. То есть через определенное время подписываться на событие MOUSE_OUT, но, как вы понимаете, ниче хорошего из этого не вышло.

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Ошибки нужно исправлять, а не скрывать. Покажите код, может быть другие увидят в чем причина.

Старый 28.02.2011, 02:31
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 5  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Полностью с тобой согласен, что ошибки надо исправлять... НО... я просто понять не могу, что мутит этот Papervision. Весь код показывать, думаю, не имеет смысла. Вот главное:

На МувиКлипы вешаю события MOUSE_OVER MOUSE_OUT. Пихаю эти мувики в Plane. Ну и в слушателях события происходят определенные действия. то есть ничего необычного, например:
Код AS3:
mov[i].addEventListener(MouseEvent.MOUSE_OVER, onOver)
mov[i].addEventListener(MouseEvent.MOUSE_OUT, onOut)
 
private function onOver(e:MouseEvent):void
{
    trace("OVER")
}
 
private function onOut(e:MouseEvent):void
{
    trace("OUT")
}

Старый 28.02.2011, 03:40
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
mov[i].mouseChildren = false;
и закрывайте тему ))

Старый 28.02.2011, 03:42
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 7  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Потрейсите e.relatedObject, это может дать зацепку.
__________________
тонкий тролль, осеянный благодатью

Старый 28.02.2011, 10:01
cr0w312 вне форума Посмотреть профиль Отправить личное сообщение для cr0w312 Найти все сообщения от cr0w312
  № 8  
Ответить с цитированием
cr0w312
 
Аватар для cr0w312

Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
в PV3D свои ивенты. для их рвботы надо выполнить несколько условий
1 - интерактивный вьюпорт
Код AS3:
         viewport.interactive = true;
2 - интерактивный материал
Код AS3:
         myMaterial.interactive = true;
3 - прицеп слушателя к 3D объекту
Код AS3:
    import org.papervision3d.events.InteractiveScene3DEvent;
    ....
       var plane:Plane = new Plane(myInteractiveMaterial, 300, 300, 3, 3);
       plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, planeMouseOver);
    ....
      Private function planeMouseOver(e:InteractiveScene3DEvent):void{
             e.displayObject3D..localRotationY += 10;
      }
есть и другой способ - зашить спрайт(в данном случае кнопка с именем "btn") в мувик с именем, в данном случае - "material"
Код AS3:
import org.papervision3d.materials.MovieAssetMaterial;
         ....
         viewport.interactive = true;
         var material:MovieAssetMaterial = new MovieAssetMaterial("material",false,true,false,true);
         material.interactive = true;
 
			MovieClip(MovieClip(material.movie).getChildByName("btn")).mouseChildren = false;
			MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.CLICK,click);
			MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.MOUSE_OVER,mouseOver);
			MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
         private function click(e:MouseEvent):void
		{
			var buttonText:TextField = MovieClip(e.target).getChildByName("label") as TextField;
			switch(buttonText.text)
			{
				case "start":
					buttonText.text = "stop";
					MovieClip( MovieClip(e.target).parent ).play();
				break;
				default:
					buttonText.text = "start";
					MovieClip( MovieClip(e.target).parent ).stop();
			}
		}
 
		private function mouseOver(e:MouseEvent):void
		{
			viewport.buttonMode = true;
		}
 
		private function mouseOut(e:MouseEvent):void
		{
			viewport.buttonMode = false;
		}
вот примерно так


Последний раз редактировалось cr0w312; 28.02.2011 в 14:19.
Старый 28.02.2011, 21:35
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 9  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Цитата:
Сообщение от in4core Посмотреть сообщение
Код AS3:
mov[i].mouseChildren = false;
и закрывайте тему ))
Я б с удовольствием, но ничего не выходит. К тому же mov[i] детей не имеет
Цитата:
Потрейсите e.relatedObject, это может дать зацепку.
Потрейсил. Выходит трейсится по два-три раза следующее: Stage, Sprite(родитель мувиков), mov_Class(сам мувик). Трейсятся они в разном сочетании, то три раза Stage, то 2 раза Sprite, то по одному дисплэйОбджекту. Короче ХЗ.... Пытался применять mouseChidren mouseEnabled в различных сочетаниях - не помогает.

Старый 01.03.2011, 00:18
cr0w312 вне форума Посмотреть профиль Отправить личное сообщение для cr0w312 Найти все сообщения от cr0w312
  № 10  
Ответить с цитированием
cr0w312
 
Аватар для cr0w312

Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
Цитата:
Сообщение от DZHETIGAPA Посмотреть сообщение
Я б с удовольствием, но ничего не выходит. К тому же mov[i] детей не имеет


Потрейсил. Выходит трейсится по два-три раза следующее: Stage, Sprite(родитель мувиков), mov_Class(сам мувик). Трейсятся они в разном сочетании, то три раза Stage, то 2 раза Sprite, то по одному дисплэйОбджекту. Короче ХЗ.... Пытался применять mouseChidren mouseEnabled в различных сочетаниях - не помогает.
если так трудно понять что я написал, прилепи архив со своим проектом к посту и скажи какое событие именно нужно, я тебе все набросаю за 2 минуты. На своем конкретном примере и разберешься что к чему.

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

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

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


 


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


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