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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.07.2010, 15:49
Jin 2 вне форума Посмотреть профиль Отправить личное сообщение для Jin 2 Посетить домашнюю страницу Jin 2 Найти все сообщения от Jin 2
  № 1  
Ответить с цитированием
Jin 2

Регистрация: Aug 2002
Адрес: Ростов-на-Дону
Сообщений: 74
Отправить сообщение для Jin 2 с помощью ICQ
По умолчанию Постоянно срабатывающий MOUSE_OUT

Такая задача,
есть индикатор батареи, при наведении на него появляется всплывающая подсказка, при отведении мыши с индикатора исчезает, все просто.
Но нужно чтоб при наведении на подсказку она не исчезала, плюс в подсказке должны быть кнопки.
Я сделал так, при отведении мыши от кнопки стартует Таймер и через секунду закрывает подсказку.
При наведении на подсказку Таймер останавливается, при отведении мыши от подсказки она должна исчезнуть,
вот тут-то и возникают проблемы, я вожу мышкой по подсказке и постоянно срабатывает MOUSE_OUT, mouseChildren = false помогает решить проблему, но тогда не работают кнопки в подсказке.

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

Регистрация: Jul 2010
Адрес: 50° 27′ 0″ N, 30° 30′ 0″ E
Сообщений: 256
Записей в блоге: 2
это текст на подсказке

специально изваял пример(на haXe правда)
если изменить строчку
Код AS3:
static var textFieldActive:Bool = false;
будут те-же грабли

// доработать напильником и чудный компонент получится

походу вопрос - как избавится от вызова MouseOut при hint.visible = false?

Код AS3:
package ;
package ;
 
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.Lib;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.Vector;
import haxe.Timer;
 
/**
 * ...
 * @author toxa
 */
 
class Main 
{
	static var hintDelay:UInt = 2000;
	static var textFieldActive:Bool = false;
 
	private var hintAlphaChange:Float;
 
	private var stage:MovieClip;
	private var button:Sprite;
	private var hint:Sprite;
	private var timer:Timer;
 
// рисование	
 
	private function crateBoxWithText(color:UInt, text:String, dst:Sprite, baloon:Bool) {
 
		var textField = new TextField();
		textField.text = text;
		textField.autoSize = TextFieldAutoSize.CENTER;
		textField.mouseEnabled = textFieldActive;
		var width = textField.width +20;
		var height = textField.height + 10;
 
		dst.graphics.beginFill(color);
		dst.graphics.drawRoundRect( -width / 2, -height / 2, width, height, 10);
		dst.graphics.endFill();
 
		if (baloon) {
			dst.graphics.beginFill(color);
			dst.graphics.moveTo(width / 2, 0);
			dst.graphics.lineTo(width / 2, height / 2 + 20);
			dst.graphics.lineTo(width / 2 - 20, 0);
			dst.graphics.endFill();
		}				
		dst.addChild(textField);
 
		textField.x = -textField.width / 2;
		textField.y = -textField.height / 2;	
	}
 
	private function drawButton() {
		button = new Sprite();
		stage.addChild(button);
		crateBoxWithText(0xeeeeee, 'Simple Button', button, false);
		button.y = (stage.stage.stageWidth - button.width) / 2;
		button.x = (stage.stage.stageWidth - button.height) / 2;
		}
 
 
	private function drawHint() {
		hint = new Sprite();
		stage.addChild(hint);
		crateBoxWithText(0xffcc00, 'You clicked Simple Button - here is a hint!', hint, true);
		hint.y = button.y-50;
		hint.x = button.x - hint.width / 2;
		hint.visible = false;
	}
 
// управление таймером
 
	private function startTimer() {
		if (hint.visible == true) {
		trace('Таймер включен');
		timer = new Timer(hintDelay);
		timer.run = timerRun; } 
		else {
			trace('Подсказка не активна, таймер включать не надо');
		}
	}
 
	private function stopTimer() {
		trace('Таймер выключен');
		timer.stop();
	}
 
	private function timerRun () {
		trace('Время вышло - выключаем таймер, прячем подсказку');
		hideHint();
		stopTimer();
	}
 
 
// управление подсказкой
 
	private function animateHint(e:Event) {
		hint.alpha += hintAlphaChange;
 
		if ((hint.alpha > 0.99) && (hintAlphaChange>0)) {
			hint.alpha = 1;
			hint.removeEventListener(Event.ENTER_FRAME, animateHint);
		}
 
		if ((hint.alpha < 0.01) && (hintAlphaChange<0)) {
			hint.alpha = 0.1;
			hint.removeEventListener(Event.ENTER_FRAME, animateHint);
			hint.visible = false;
		}
	}
 
	private function showHint() {
		trace('Покажем подсказку');
		hint.visible = true;
		hintAlphaChange = 0.1;
		hint.addEventListener(Event.ENTER_FRAME, animateHint);
		hint.addEventListener(MouseEvent.MOUSE_OVER, hintMouseOver);
		hint.addEventListener(MouseEvent.MOUSE_OUT, hintMouseOut);		
		hint.addEventListener(MouseEvent.MOUSE_UP, hintMouseUp);
	}
 
	private function hideHint() {
		trace('Прячем подсказку');
		hint.removeEventListener(MouseEvent.MOUSE_OVER, hintMouseOver);
		hint.removeEventListener(MouseEvent.MOUSE_OUT, hintMouseOver);
		hint.removeEventListener(MouseEvent.MOUSE_UP, hintMouseUp);
		hintAlphaChange = -0.1;
		hint.addEventListener(Event.ENTER_FRAME, animateHint);
	}
 
// события кнопки	
 
	private function buttonMouseOver(e:Event) {
		trace('button.rollOver - покажем подсказку, таймер выключен');
		showHint();
		stopTimer();		
	}
 
	private function buttonMouseOut(e:Event) {
 
		if (hint.visible == true) {
			trace('button.MouseOut - включаем таймер');					
			startTimer();
		} else {
			trace('button.MouseOut - рудимент :), ничего не делаем');				
		}
	}
 
// события подсказки
 
	private function hintMouseOver(e:Event) {
		trace('hint.MouseOver - выключаем таймер');
		stopTimer();		
	}
 
	private function hintMouseOut(e:Event) {
		trace('hint.MouseOut - включаем таймер');				
		startTimer();
	}
 
	private function hintMouseUp(e:Event) {	
		trace('hint.MouseUp - прячем подсказку, выключаем таймер');
		hideHint();
		stopTimer();
	}
 
	public function new() {
		stage = Lib.current;
		drawButton();
		button.buttonMode = true;
		drawHint();
		hint.buttonMode = true;
 
		timer = new Timer(hintDelay);						
 
		hint.alpha = 0.1;
		button.addEventListener(MouseEvent.MOUSE_OVER, buttonMouseOver);
		button.addEventListener(MouseEvent.MOUSE_OUT, buttonMouseOut);		
	}
 
 
	static function main() 
	{
	new Main();	
	}
 
}

Старый 28.07.2010, 22:58
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Используйте не MOUSE_OUT, а ROLL_OUT. Можете, заодно, почитать в чем разница
__________________
...вселенская грусть

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

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

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


 


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


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