Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Баг в DisplayObject::rotation (http://www.flasher.ru/forum/showthread.php?t=161344)

MrPoma 23.07.2011 06:14

Баг в DisplayObject::rotation
 
Или не баг?

Код AS3:

public class DisplayObjectBug extends Sprite{
                private var obj:DisplayObject;
 
                public function DisplayObjectBug(){
                        super();
                        if(super.stage){
                                this.init();
                        }else{
                                super.addEventListener(Event.ADDED_TO_STAGE, this.handleAddedToStage);
                        }
                }
 
                private function init():void{
                        super.stage.scaleMode = StageScaleMode.NO_SCALE;
                        super.stage.align = StageAlign.TOP_LEFT;
 
                        var shape:Shape = new Shape();
                        shape.graphics.beginFill(0x000000);
                        shape.graphics.drawRect(0, 0, 200, 100);
                        shape.graphics.endFill();
                        shape.x = 200;
                        shape.y = 150;
                        super.addChild(shape);
                        this.obj = shape;
 
                        this.addEventListener(Event.ENTER_FRAME, this.handleEnterFrame);
                }
 
                private function handleEnterFrame(event:Event):void{
                        this.obj.width = 100;
                        this.obj.height = 100;
                        this.obj.rotation += 5;
                }
 
                private function handleAddedToStage(event:Event):void{
                        super.removeEventListener(Event.ADDED_TO_STAGE, this.handleAddedToStage);
                        this.init();
                }
}

http://youtu.be/-jH3x2MJEUs

Flex SDK 4.0, Flash Player 10.2.159.1

kackbip 23.07.2011 08:07

Все логично... width и height ведь устанавливаются для уже повернутого прямоугольника
А по-другому:
меняем rotation у this, а width и height у obj

i.o. 23.07.2011 08:11

Тема не раскрыта.
Видео не показывается..

Добавлено через 5 минут
Прикольное "сердцебиение" :)
Это нормально, с 9-го плеера не менялось.

MrPoma 23.07.2011 19:06

Цитата:

Сообщение от kackbip (Сообщение 1013887)
Все логично... width и height ведь устанавливаются для уже повернутого прямоугольника

http://f.cl.ly/items/0v0Z383D2D2p2E1...2017.53.28.png

Если менять скейл - работает как надо.

kackbip 23.07.2011 19:21

Я не вижу противоречий :)

MrPoma 23.07.2011 19:36

Цитата:

Сообщение от kackbip (Сообщение 1013971)
Я не вижу противоречий :)

в коде width и height устанавливается в 100. А на картинке зона отрисовки прямоугольная.

kackbip 23.07.2011 21:46

А если попробовать поставить shape в (0,0) а не(200, 150)?

MrPoma 23.07.2011 22:31

Роли не играет. Почему через скейл работает, а так нет - непонятно.

alatar 24.07.2011 11:32

Потому, что width / height это ширина и высота прямоугольника описывающего ваш спрайт, а не его содержимого без учета поворота.

wvxvw 24.07.2011 21:28

Я как-то тоже сталкивался. Не знаю, как по мне, для повернутых на *неизвестное* количество градусов фигуры, свойства высота и ширина теряют смысл (во флеше). Т.е. задав, например, высоту, мы поменяем ширину, т.как она косвенно связана с scaleX, а он, в свою очередь, изменится изза того, что мы поменяли высоту (т.как фигура повернута). Я в итоге решил тогда через использование transform.matrix или new Transform(mySprite). С последующими операциями над ними. Можно, конечно, пойти от обратного, и вычислять поворот, и угадывать, какому из параметров флеш будет присваивать значение из width/height, но есть предчувствие, что в каких-то ситуациях можно будет задать только что-то одно.


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

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