Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   e.stageX и e.stageY больше stage.stageWidth и stage.stageHeight (http://www.flasher.ru/forum/showthread.php?t=138669)

random13 13.04.2010 18:00

e.stageX и e.stageY больше stage.stageWidth и stage.stageHeight
 
как может получится подобная ситуация?

Zebestov 13.04.2010 18:09

а что это за свойства stageX и stageY?
тупанул =)

ps_spectre 13.04.2010 18:11

когда stage.scaleMode = StageScaleMode.SHOW_ALL;

random13 13.04.2010 18:50

но у меня в том то и дело
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE


ps_spectre 13.04.2010 19:01

при stage.scaleMode = StageScaleMode.NO_SCALE
координаты мышки не больше чем размер stage.
Потому что при resize высота и ширина сцены тоже меняются.
собственно даже событие такое происходить. Event.RESIZE

Psycho Tiger 13.04.2010 19:55

Странные вы.
Цитата:

stage.scaleMode = StageScaleMode.NO_SCALE
Переводим: не маштабировать.
Цитата:

Потому что при resize высота и ширина сцены тоже меняются.
Это ок? Меняем, если не масштабируем?)
Код AS3:

stage.scaleMode = StageScaleMode.SHOW_ALL

А вот тут уже содержимое всегда ровно столько сколько экрана.

silin 13.04.2010 20:00

>>e.stageX и e.stageY больше stage.stageWidth и stage.stageHeight, как может получится подобная ситуация?

будет пример?
или самим предлагается достигнуть такого, типа шарада: а вот кому не слабо ? :)

ps_spectre 13.04.2010 20:10

Psycho Tiger,
речь шла о stageWidth, stageHeight.
----
формально:
1)stage.scaleMode = StageScaleMode.SHOW_ALL => растягиваем окно флеш плеера.
stage.stageWidth, stage.stageHeight не меняется, но координаты мышки больше могут быть этих значений.
2)stage.scaleMode = StageScaleMode.NO_SCALE => растягиваем окно флеш плеера.
stage.stageWidth, stage.stageHeight меняются, координаты мышки не могут быть больше этих значений.
----
причем тут содержимое? Вопрос конкретно был когда координата мыши больше чем фактическое значение размера сцены.

Psycho Tiger 13.04.2010 22:00

Цитата:

stage.stageWidth, stage.stageHeight меняются, координаты мышки не могут быть больше этих значений.
А если мышку зажать и перетащить за окно флеш плеера - координаты всё равно будут передаваться. =)

А в предыдущем посте... я даже не помню, к чему я это писал. Надо меньше пить =)

random13 14.04.2010 12:36

такое произошло в следующей ситуации, пользуюсь наработками товарища etcs по работе с скролом + плюс кое что свое и чужое, вот что получилось:

Код AS3:

package libraries
{
        import flash.display.InteractiveObject;
        import flash.display.Stage;
        import flash.events.MouseEvent;
        import flash.external.ExternalInterface;
        import flash.geom.Point;
        import flash.geom.Rectangle;
 
        import spark.primitives.Rect;
 
        public class CustomMouseWheel
        {
                private static var _instance:CustomMouseWheel;
                private var _stage:Stage;
                private var _cloneEvent:MouseEvent;
                private var _lastCoord:Point;
 
                public function CustomMouseWheel(singletoniser:Singletoniser) {
                        if(singletoniser == null) {
                                throw new Error('This is singleton class, use getInstance() instead');
                        }
                }
 
                public static function getInstance():CustomMouseWheel
                {
                        CustomMouseWheel._instance ? CustomMouseWheel._instance : CustomMouseWheel._instance = new CustomMouseWheel( new Singletoniser() );
                        return CustomMouseWheel._instance;
                }
 
                public static function setup(stage:Stage):void {
                        CustomMouseWheel.getInstance()._setup(stage);                       
                }
 
                private function _setup(stage:Stage):void {
                        this._stage = stage;
                        this._stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
                        this._stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
                        this._stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                        ExternalInterface.addCallback('sendMouseWheelEvent', externalMouseEvent);
                }
 
                private function onMouseOver(e:MouseEvent):void {
                        this._stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                }
 
                private function onMouseOut(e:MouseEvent):void {
                        this._stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                }
 
                private function onMouseMove(e:MouseEvent):void {
                        this._lastCoord = new Point(e.stageX,e.stageY);
                        this._cloneEvent = MouseEvent(e);
                }
 
                private function externalMouseEvent(delta:Number):void {
                        if(delta > 0 && delta < 1)
                                delta = 1;
                        else if(delta > -1 && delta < 0)
                                delta = -1;
 
                        var wheelEvent:MouseEvent = new MouseEvent(
                                MouseEvent.MOUSE_WHEEL,
                                true,
                                false,
//                                this._cloneEvent.stageX,
//                                this._cloneEvent.stageY,
                                this._lastCoord.x,
                                this._lastCoord.y,
                                this._cloneEvent.relatedObject,
                                this._cloneEvent.ctrlKey,
                                this._cloneEvent.altKey,
                                this._cloneEvent.shiftKey,
                                this._cloneEvent.buttonDown,
                                delta
                        );
                        this._stage.dispatchEvent(wheelEvent);
                }
        }
}
 
class Singletoniser {}

про координаты как я уже писал изменялись вот тут

Код AS3:

//                                this._cloneEvent.stageX,
//                                this._cloneEvent.stageY,
                                this._lastCoord.x,
                                this._lastCoord.y,

поэтому собственно закоменчено и добавлена точка

GentleFLASH 14.04.2010 22:37

Цитата:

1)stage.scaleMode = StageScaleMode.SHOW_ALL => растягиваем окно флеш плеера.
stage.stageWidth, stage.stageHeight не меняется
2)stage.scaleMode = StageScaleMode.NO_SCALE => растягиваем окно флеш плеера.
stage.stageWidth, stage.stageHeight меняются
Вот это кстати баг, потому как если флэшку скомпилить под 9ый плеер, то там в любом случаее меняться будет stage.stageWidth, stage.stageHeight.
Так что, если кому не безразлично, пожалуйста поддержите мой багрепорт - http://bugs.adobe.com/jira/browse/FP-1390
Уже год как ответа внятного дать не могут. Проголосуйте или коммент напишите, кто зарегистрирован, если не лень ;)

ps_spectre 15.04.2010 00:11

GentleFLASH, о, кстате да, это баг оказывается (или хитрая фича). )) проверил под 9й - работает по-другому, да.
А под 10.1 не проверяли? Может там пофиксили?

p.s. поддержал багрепорт.

GentleFLASH 15.04.2010 09:14

ps_spectre, большое спасибо ;)
Под 10.1 не проверял. А как это вообще сделать?.. Слышать то слышал, но вот плеера то не вижу такого на странице плееров - http://www.adobe.com/support/flashpl...oads.html#fp10 .Там последний вроде как 10.0.45.2. И кстати компилить чем? Новый Flex SDK поддерживает 10.1? Да и если бы пофиксили, то думаю они написали бы, что мол не парься чувак, все уже гуд, а то так летом последний вопрос задали...;)

ps_spectre 15.04.2010 09:56

GentleFLASH, бету можно с adobe labs взять тыц (сам я не ставил)

кстате, я тут подумал, может это не баг 10го плеера, а все же 9го? Ведь можно предположить, что размер сцены все же не должен меняться (конкретно параметры stageWidth, stageHeight), когда стоит режим отличный от NO_SCALE, ведь по идее то размеры те же, просто маштаб увеличивается или уменьшается... Вот есть свойства у stage - scaleX, scaleY, только они или не работают, или я не понимаю для чего они нужны, всегда 1 показывают. Короче, не сильно ясно конкретно как должно быть, но что есть то есть.

GentleFLASH 15.04.2010 11:21

Ну как бы в 9м stageWidth, stageHeight показывали всегда в пикселах, сколько флэшка занимает по ширине и высоте вообще (в окне или в браузере), при чем независимо от режима (NO_SCALE, SHOW_ALL и т.д). Это было очень удобно, например можно без проблем было сделать какой нибудь немасштабируемый объект, и опираясь на эти stageWidth, stageHeight, вычислять scaleX и scaleY этого объекта так, чтобы он в любых режимах и при любых растяжениях окна смотрелся на 100%. А сейчас, в 10м, этого без ухищрений сделать нельзя, если режим не NO_SCALE. Плюс потом, если допустим stageWidth, stageHeight показывают размер сцены, то тогда при растяжении окна в SHOW_ALL режиме, все равно хоть как то должны меняться параметры, потому что площадь флэхи меняется. А тут просто исходное значение показывает. Тогда в принципе можно и в NO_SCALE было бы показывать тоже исходное - типа размер сцены то не меняется, только отступы становятся больше или меньше. И еще - насколько я помню, Event.RESIZE работает некорректно, если не NO_SCALE.
Поэтому я считаю, что это баг.

ps_spectre 15.04.2010 11:30

GentleFLASH, ага Event.RESIZE при NO_SCALE только, да.
так я к тому, что в принципе, как вариант, если бы в SHOW_ALL режиме менялись stage.scaleX / stage.scaleY.
а так да, и ни stageWidth, и ни scaleX не меняется, поэтому все же баг по идее. Ну вообщем, я поддержал, может еще кто-то подключится и станет более ясным положение дел.


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

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