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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.11.2011, 18:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 61  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Нажали в левом месте, перевели курсор на кнопку, отпустили... проблема.
Клика не будет, если нажали не на этой кнопке... То что кнопка покажет состояние даун, но не отработает клик – согласен, непорядок для стандартной кнопки... Убедили, тут без стейджа никуда)). Спасибо, что обратили на это мое внимание, пошел переписывать свой BaseButton.
__________________
Reality.getBounds(this);

Старый 13.11.2011, 19:13
Vektor вне форума Посмотреть профиль Отправить личное сообщение для Vektor Найти все сообщения от Vektor
  № 62  
Ответить с цитированием
Vektor
 
Аватар для Vektor

Регистрация: May 2008
Адрес: Новокузнецк
Сообщений: 219
Записей в блоге: 1
Почитал и решил под редактировать с учетом написанного.
Еще раз под редактировал.
Код AS3:
package {
	import flash.display.MovieClip;
        import flash.display.Stage;
	import flash.events.MouseEvent;
	public class Cbutton extends MovieClip {
		private var _mcButton:mcButton=new mcButton  ;
		private var _mcButton1:mcButton1=new mcButton1  ;
		private var _Down:Boolean=false;
		private var _DownButon:Object=new Object  ;
		public function Cbutton():void {
			// constructor code
			onButtonCreate(_mcButton,100,100);
			onButtonCreate(_mcButton1,200,100);
		}
		private function onButtonCreate(But:MovieClip,x:int,y:int):void {
			addChild(But);
			But.stop();
			But.x=x;
			But.y=y;
			this.addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
			this.addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
			this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
		}
		private function onMouseEvent(event:MouseEvent):void {
			trace(event.target);
			switch (event.type) {
				case MouseEvent.MOUSE_OVER :
					if (_Down&&_DownButon==event.target) {
						_DownButon.gotoAndStop(3);
					} else {
						event.target.gotoAndStop(2);
					}
					break;
				case MouseEvent.MOUSE_OUT :
					event.target.gotoAndStop(1);
					break;
				case MouseEvent.MOUSE_DOWN :
					_DownButon=event.target;
					event.target.gotoAndStop(3);
					_Down=true;
					break;
				case MouseEvent.MOUSE_UP :
					if (!(event.target is Stage)) {
						event.target.gotoAndStop(2);
					}
					_Down=false;
					break;
			}
		}
	}
}
__________________
Книги и желание лучшие учителя.


Последний раз редактировалось Vektor; 13.11.2011 в 22:11.
Старый 13.11.2011, 19:21
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 63  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
Код AS3:
			this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
Разве не будет дважды срабатывать?

Добавлено через 1 минуту
А, все, вопрос снял - увидел проверку

Старый 13.11.2011, 19:28
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 64  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
При чем тут даун на стейдже вообще. Вас должен интересовать только ап после дауна на кнопке.
Вот так поправил себе. Стало чудненько.
Код AS3:
private function handlerDown(event:MouseEvent):void 
{
	_isDown = true;
	_upState.visible = false;
	_overState.visible = false;
	_downState.visible = true;
	stage.addEventListener(MouseEvent.MOUSE_UP, handlerUp, true);
	stage.addEventListener(Event.MOUSE_LEAVE, handlerUp, false);
}
 
private function handlerUp(event:Event):void 
{
	_isDown = false;
}
 
private function handlerOver(event:MouseEvent):void 
{
	if (_isDown)
	{
		handlerDown(null);
		return;
	}
	_upState.visible = false;
	_overState.visible = true;
	_downState.visible = false;
}
__________________
Reality.getBounds(this);

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

Регистрация: May 2008
Адрес: Новокузнецк
Сообщений: 219
Записей в блоге: 1
Теперь, вроде правильно работает, код выше.
__________________
Книги и желание лучшие учителя.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Стало чудненько.
На MOUSE_LEAVE можно не подписываться, MOUSE_UP в любом случае сработает. И отписаться надо в handlerUp.
Ну и я бы вместо _isDown использовал _isOver с проверкой в handlerUp, но это уже предпочтения.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.11.2011, 21:12
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 67  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Цитата:
Сообщение от alatar Посмотреть сообщение
Нажали в левом месте, перевели курсор на кнопку, отпустили... проблема.
Это не должно генерить клик. Более того, не все кнопки показывают состояние down при таком (в 2010 студии - именно так). Как там кнопки реагируют при нажатии/отпускании вне их - волнует только особо упёртых разработчиков интерфейсов =)
PS: пожалуйста,
Код AS3:
event.target=="[object Stage]"
=>
Код AS3:
event.target is Stage
а то хочется убить...
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 13.11.2011 в 21:14.
Старый 13.11.2011, 21:25
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 68  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Это не должно генерить клик.
Должно, не должно. Не я же писал метод handlerDown, мало ли что там.
Цитата:
Как там кнопки реагируют при нажатии/отпускании вне их - волнует только особо упёртых разработчиков интерфейсов.
Помимо написания программ я их еще иногда и использую. И как пользователя меня очень волнует как реагирует кнопка на мои действия. В конце-концов, это базовый элемент любого интерфейса (исключения оставим вне дискуссии), неужели так трудно один раз сделать хорошо, а не как обычно.
Цитата:
Более того, не все кнопки показывают состояние down при таком (в 2010 студии - именно так).
В описанной мной ситуации никакая кнопка не должна показывать состояние down.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.11.2011, 21:28
Vektor вне форума Посмотреть профиль Отправить личное сообщение для Vektor Найти все сообщения от Vektor
  № 69  
Ответить с цитированием
Vektor
 
Аватар для Vektor

Регистрация: May 2008
Адрес: Новокузнецк
Сообщений: 219
Записей в блоге: 1
И как, с ним правильно работать.
Код AS3:
event.target is Stage  1120: Обращение несуществующего свойства Stage.
__________________
Книги и желание лучшие учителя.

Старый 13.11.2011, 21:42
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 70  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
alatar, ну кого реально волнует поведение кнопки в ситуациях типа "нажал, отвёл, навёл, отпустил"? Пара раз было, что я нажимал на кнопку, понимал, что это было ошибкой, отводил и отпускал. Всё. В остальных случаях между нажатием и отпусканием всегда курсор на кнопке.
Хотя вообще это мелочь и таки наверное стоит раз сделать чуть заморочившись.
Vektor, import flash.display.Stage/flash display.*
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

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

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


 


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


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