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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.11.2012, 02:43
says вне форума Посмотреть профиль Найти все сообщения от says
  № 1  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
Attention расфокусировка и бездействие

Здавствуйте,ситуация такая:у меня есть кнопка,при нажатии на которую выскакивает окно с информацие и еще одной кнопкой.

Как сделать что бы при появлении инфо окна,оно вылазило на передний план а задний расфокусировывался и стал бездейственным?

Код AS3:
package
{
	import flash.display.*;
	import flash.event.*;
	public class A extends MovieClip
	{
		var btn:Btn = new Btn();//кнопка
		var btnInfo:BtnInfo = new BtnInfo();обект содержащий в себе информацию и кнопку.
		var fon:Fon = new Fon();//обект который должен быть расфокусирован и обездействован(это кнопка )
		public function A()
		{
		addChild(fon);
		fon.addEventListener(MouseEvent.CLICK,func);
		}
    }
	function func(e:MouseEvent)
	{
		addChild(btnInfo);	
	}
 
}
з.ы. в коде могут быть ошибки,писал на скорую руку

Старый 28.11.2012, 03:42
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 2  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Не уверен, что особо помогу вам, но в as3 есть слушатели фокуса. И соответсвенно, когда фокус с "заднего плана" снимаеться и вызываеться что-то вроде отмены реакции на событие...щяс Колина Мука полистаю, освежу память, отпишу если найду.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Как сделать что бы при появлении инфо окна,оно вылазило на передний план а задний расфокусировывался и стал бездейственным?
Самый простой и эффективный способ сделать это - добавить под верхнее окно спрайт с прозрачной заливкой, полностью заполняющий окно флеш плеера. А по удалению информационного окна, соответственно, удалить и этот спрайт.
Одно но, спрайт должен позиционироваться по глобальным координатам, т.е. его точка регистрации должна находиться в том же месте, где 0:0 у стейдж.
Я обычно для подобных систем с придупреждающими окнами создаю специальный менеджер, со статическими методами, который изначально надо один раз инициализировать
Вот самый упрощенный вариант такого менеджера
Код AS3:
package  {
	import flash.display.Stage;
	/**
	 * ...
	 * @author Casey Ryan
	 */
	public class WindowsManager {
 
		private static var stage:	Stage;
 
		public static function initialize(stg:Stage):void {
			stage	= stg;
		}
		public static function showWarning():void {
			if (!stage) throw "класс не инициализирован";
			var warningWindow:WarningWindow = new WarningWindow(); // создаем окно и добавляем на стейдж; об остальном позаботится само окно
			warningWindow.x = (stage.stageWidth - warningWindow.width) / 2;
			warningWindow.y = (stage.stageHeight - warningWindow.height) / 2;
			stage.addChild(warningWindow);
		}
	}
}
import flash.display.Sprite;
import flash.events.Event;
 
internal class WarningWindow extends Sprite {
 
	private var _veil:Sprite = new Sprite();	// спрайт, который закрывает собой всю сцену
 
	public function WarningWindow() {
		graphics.beginFill(0xFFFF00);
		graphics.drawRoundRect(0, 0, 300, 170, 10, 10);
		graphics.endFill();
		addEventListener(Event.ADDED_TO_STAGE, onAdded);
	}
 
	private function onAdded(e:Event):void {
		removeEventListener(Event.ADDED_TO_STAGE, onAdded);
		_veil.graphics.beginFill(0x000000, .1);
		_veil.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
		_veil.graphics.endFill();
		parent.addChildAt(_veil, parent.getChildIndex(this));	// добавляем непосредственно под это окно; используется parent, чтобы вуаль всегда добавлялась именно в тот же контейнер, что и само окно, без передачи дополнительных ссылок на этот контейнер
	}
}
Просто и эффективно. При нажитии кнопки в окне, его можно полностью удалить, вместе с вуалью, так как ссылок на него нигде не сохранится, его уничтожит сборщик мусора.

п.с. Обычно я еще в эти окна передаю колбэки, например onClose, onCancel, onConfirm
чтобы не подписывать окно на события, и не привязывать к нему лишние ссылки. При удалении окна, ссылки на колбэки просто зануляются

Старый 29.11.2012, 15:28
says вне форума Посмотреть профиль Найти все сообщения от says
  № 4  
Ответить с цитированием
says
Banned
[+1 13.12.12]
[+6 15.11.12]
[+5 14.12.12]

Регистрация: Sep 2012
Сообщений: 91
спасибо,вы не могли бы поподробнее расписать строки в программе?

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

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

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


 


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


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