|
|
|||||
Регистрация: Jan 2009
Сообщений: 38
|
Ручной ресайз и окно браузера.
Здравствуйте!
Есть флешка в которой отключено масштабирование (StageScaleMode.NO_SCALE), а резайз делается вручную. При открытии флешки в браузере ресайз не срабатывает до тех пор пока пользователь не начнет масштабировать окно браузера. Как растянуть сцену на всю ширину окна браузера? И еще, если пользователь перейдет на другую закладку и изменит размеры окна, то флешка не получит уведомления о ресайзе и когда пользователь вернется обратно на флешку, то её старый размер. То есть если пользователь уменьшит окно, то часть флешки не будет видна. Как с этим бороться? |
|
|||||
[+1 10.12.10]
|
1.При инициализации своего приложения/фильма самостоятельно вызовете
метод ресайза. 2. подпишитесь на событие получение флешкой фокуса и так же вызовете метод ресайза |
|
|||||
Присоеденил ресайз к событиям FocusEvent.FOCUS_IN и FocusEvent.FOCUS_OUT. Всёравно в FFox3 если сайт был первым открытым в браузере, потом открыть ещё одну вкладку и вернуться к сайту, события не происходит и сайт остаётся обрезанным внизу. Может подскажите какое именно событие нужно?
|
|
|||||
[+1 10.12.10]
|
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 } |
|
|||||
Регистрация: Jan 2009
Сообщений: 38
|
murz, странно у меня не работает.
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(); } } Трейс видно только запуске флешки в плеере (при открытии, при развертывании окна плеера), а вот в браузере трейса нет. Пробовал ФФ3 и Оперу. |
|
|||||
[+1 10.12.10]
|
в haXe опыта у меня нет.
Делаю так: 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. |
|
|||||
Регистрация: Jan 2009
Сообщений: 38
|
Благодарю murz.
Во-первых, сам алгоритм масштабирования содержал ошибку. А во-вторых, его надо былом запускать и при ADDED_TO_STAGE. В итоге получилось так: 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:45. |
|
« Предыдущая тема | Следующая тема » |
Теги |
resize , масштабирование |
|
|