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

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

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

Регистрация: Jan 2009
Сообщений: 38
По умолчанию Ручной ресайз и окно браузера.

Здравствуйте!

Есть флешка в которой отключено масштабирование (StageScaleMode.NO_SCALE), а резайз делается вручную.

При открытии флешки в браузере ресайз не срабатывает до тех пор пока пользователь не начнет масштабировать окно браузера.

Как растянуть сцену на всю ширину окна браузера?


И еще, если пользователь перейдет на другую закладку и изменит размеры окна, то флешка не получит уведомления о ресайзе и когда пользователь вернется обратно на флешку, то её старый размер. То есть если пользователь уменьшит окно, то часть флешки не будет видна.

Как с этим бороться?

Старый 26.01.2009, 18:59
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 2  
Ответить с цитированием
murz
[+1 10.12.10]

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
1.При инициализации своего приложения/фильма самостоятельно вызовете
метод ресайза.
2. подпишитесь на событие получение флешкой фокуса и так же вызовете метод ресайза

Старый 26.01.2009, 20:14
mongoliano вне форума Посмотреть профиль Отправить личное сообщение для mongoliano Посетить домашнюю страницу mongoliano Найти все сообщения от mongoliano
  № 3  
Ответить с цитированием
mongoliano

Регистрация: Jun 2008
Сообщений: 55
Отправить сообщение для mongoliano с помощью ICQ Отправить сообщение для mongoliano с помощью Skype™
Цитата:
Сообщение от murz Посмотреть сообщение
2. подпишитесь на событие получение флешкой фокуса и так же вызовете метод ресайза
Присоеденил ресайз к событиям FocusEvent.FOCUS_IN и FocusEvent.FOCUS_OUT. Всёравно в FFox3 если сайт был первым открытым в браузере, потом открыть ещё одну вкладку и вернуться к сайту, события не происходит и сайт остаётся обрезанным внизу. Может подскажите какое именно событие нужно?

Старый 26.01.2009, 21:25
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 4  
Ответить с цитированием
murz
[+1 10.12.10]

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
Код AS3:
stage.addEventListener(Event.ACTIVATE, activateHandler);
stage.addEventListener(Event.RESIZE, resizeHandler);
 
private function activateHandler(e:Event):void {
	trace( "activate : ", stage.stageWidth, stage.stageHeight);
	resize();
		}
 
private function resizeHandler(e:Event):void {
	trace( "resize : ",stage.stageWidth, stage.stageHeight);
	resize();
		}
private function resize():void {
//any
}
Везде работает, только в ФФ3 при ресайзе в меньшую сторону глючит, в большую все окей. Я использовал для теста SWFObject, может он виноват.

Старый 26.01.2009, 21:37
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 5  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
murz, странно у меня не работает.

Код AS3:
class Main {
 
	...
 
	public function new() {
		Lib.current.stage.scaleMode = StageScaleMode.NO_SCALE;
		Lib.current.stage.addEventListener(Event.RESIZE, onStageResize);		
		Lib.current.stage.addEventListener(Event.ACTIVATE, onActivate);		
 
		...
 
		...
 
 
		...
	}
 
	...
 
	function highLevelResize() {
		...
	}
 
	function onStageResize(event:Event) {
		highLevelResize();
	}
 
	function onActivate(event: Event) {
		trace("onActivate");
		highLevelResize();
	}
 
    static function main() {
		new Main();
    }
}
Стоит оговорится, что я использую haXe, но, имхо, это не очень важно.

Трейс видно только запуске флешки в плеере (при открытии, при развертывании окна плеера), а вот в браузере трейса нет.

Пробовал ФФ3 и Оперу.

Старый 26.01.2009, 22:05
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 6  
Ответить с цитированием
murz
[+1 10.12.10]

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
в haXe опыта у меня нет.
Делаю так:
Код AS3:
package {
 
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.display.LoaderInfo;
 
	/**
	 * ...
	 * @author Aleksey Matveev
	 * @version 0.1
	 */
 
	public class Main extends Sprite {
		//--------------------------------------------------------------------------
		//
		//  Public prop
		//
		//--------------------------------------------------------------------------
		public const URL:String = "http://imgl.yandex.net/i/www/logo1.png";
		//--------------------------------------------------------------------------
		//
		//  Protected prop
		//
		//--------------------------------------------------------------------------
		//--------------------------------------------------------------------------
		//
		//  Private prop
		//
		//--------------------------------------------------------------------------
		private var _loader:Loader;
		//--------------------------------------------------------------------------
		//
		//  Cunstructor
		//
		//--------------------------------------------------------------------------
 
		public function Main():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		//--------------------------------------------------------------------------
		//
		//  Private methods
		//
		//--------------------------------------------------------------------------
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			_loader = new Loader();
			_loader.load(new URLRequest(URL));
 
			addChild(_loader);
			_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);
			stage.addEventListener(Event.ACTIVATE, activateHandler);
            stage.addEventListener(Event.RESIZE, resizeHandler);
		}
 
		private function loadCompleteHandler(e:Event):void {
			trace("load Complete");
                        resize();
		}
 
		private function activateHandler(e:Event):void {
			trace( "activate : ", stage.stageWidth, stage.stageHeight);
			resize();
		}
 
		private function resizeHandler(e:Event):void {
			trace( "resize : ",stage.stageWidth, stage.stageHeight);
			resize();
		}
		private function resize():void {
			//trace("<<<>>>");
			_loader.x = (stage.stageWidth >> 1) - (_loader.width >> 1);
			_loader.y = (stage.stageHeight >> 1) - (_loader.height >> 1);
		}
 
 
	}
 
}


Последний раз редактировалось murz; 26.01.2009 в 22:21.
Старый 30.01.2009, 16:26
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 7  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
Благодарю murz.

Во-первых, сам алгоритм масштабирования содержал ошибку. А во-вторых, его надо былом запускать и при ADDED_TO_STAGE.


В итоге получилось так:

Код AS3:
class Main {
 
	public function new() {
		Lib.current.stage.scaleMode = StageScaleMode.NO_SCALE;
		Lib.current.addEventListener(Event.RESIZE, onStageResize);		
		Lib.current.addEventListener(Event.ACTIVATE, onActivate);		
		Lib.current.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);		
 
...
	}
 
 
	function highLevelResize() {
		for (i in 0...Lib.current.numChildren) {
			if (Reflect.hasField(Lib.current.getChildAt(i), "updateSizeAndPos")) {
				var control:Control = cast(Lib.current.getChildAt(i), Control);
				control.updateSizeAndPos();
			}
		}
	}
 
 
	private function onAddedToStage(e:Event):Void 
	{
		highLevelResize();
	}
 
	function onStageResize(event:Event) {
		highLevelResize();
	}
 
	function onActivate(event: Event) {
		highLevelResize();
	}
 
    static function main() {
		new Main();
    }
}
Работает корректно в ФФ, ИЕ и Хроме. В других не проверял.

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

Теги
resize , масштабирование
Опции темы
Опции просмотра

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

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


 


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


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