Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему concatenatedMatrix не единична? (http://www.flasher.ru/forum/showthread.php?t=157355)

Korchy 04.06.2011 07:48

Почему concatenatedMatrix не единична?
 
Откуда масштаб?

Код AS3:

package Tmp {
        import flash.display.Sprite;
//-----------------------------
        public class Tmp extends Sprite {
//-----------------------------
                private var a:Sprite;
//-----------------------------
                public function Tmp() {
                        a = new Sprite();
                        trace(transform.matrix.toString());
                        trace(transform.concatenatedMatrix.toString());
                        trace(a.transform.matrix.toString());
                        trace(a.transform.concatenatedMatrix.toString());
                }
        }
}

вывод:
D:\Programms\Flash\Tmp\Src\Tmp.fla:
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=5, b=0, c=0, d=5, tx=0, ty=0)

dimarik 04.06.2011 19:33

А если "a" будет иметь размер?

Korchy 05.06.2011 11:37

Цитата:

Сообщение от dimarik (Сообщение 1001216)
А если "a" будет иметь размер?

Матрица становится вообще нулевой:

Код AS3:

package Tmp {
        import flash.display.Sprite;
//-----------------------------
        public class Tmp extends Sprite {
//-----------------------------
                private var a:Sprite;
//-----------------------------
                public function Tmp() {
                        a = new Sprite();
                        a.width = 100;
                        a.height = 10;
                        trace(transform.matrix.toString());
                        trace(transform.concatenatedMatrix.toString());
                        trace(a.transform.matrix.toString());
                        trace(a.transform.concatenatedMatrix.toString());
                }
        }
}

вывод:
D:\Programms\Flash\Tmp\Src\Tmp.fla:
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=0, b=0, c=0, d=0, tx=0, ty=0)
(a=0, b=0, c=0, d=0, tx=0, ty=0)

etc 05.06.2011 23:18

Не надо расстягивать вакуум. С пустыми спрайтами вообще метаморфозы происходят.

dimarik 05.06.2011 23:29

Попробуйте, я сейчас не имею под рукой FB.
Код AS3:

package Tmp {
        import flash.display.Sprite;
        import flash.display.Graphics;
 
        public class Tmp extends Sprite {
                public function Tmp() {
                        const a:Sprite = new Sprite();
                        const g:Graphics = a.graphics;
                        g.drawRectangle(0, 0, 100, 100); // Начнем иметь размер. Тест.
                        trace(transform.matrix.toString());
                        trace(transform.concatenatedMatrix.toString());
                        trace(a.transform.matrix.toString());
                        trace(a.transform.concatenatedMatrix.toString());
                }
        }
}

Добавлено через 11 минут
У меня одного проблема с русской кодировкой в Хроме в тегах?

g.drawRectangle(0, 0, 100, 100); // Начнем иметь размер. Тест.
Нормально отображается только вне тега [AS3/]

Korchy 07.06.2011 14:52

Цитата:

Сообщение от dimarik (Сообщение 1001403)
Попробуйте, я сейчас не имею под рукой FB.
Код AS3:

package Tmp {
        import flash.display.Sprite;
        import flash.display.Graphics;
 
        public class Tmp extends Sprite {
                public function Tmp() {
                        const a:Sprite = new Sprite();
                        const g:Graphics = a.graphics;
                        g.drawRectangle(0, 0, 100, 100); // Начнем иметь размер. Тест.
                        trace(transform.matrix.toString());
                        trace(transform.concatenatedMatrix.toString());
                        trace(a.transform.matrix.toString());
                        trace(a.transform.concatenatedMatrix.toString());
                }
        }
}

Добавлено через 11 минут
У меня одного проблема с русской кодировкой в Хроме в тегах?

g.drawRectangle(0, 0, 100, 100); // Начнем иметь размер. Тест.
Нормально отображается только вне тега [AS3/]

На выходе тоже что и вначале
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=5, b=0, c=0, d=5, tx=0, ty=0)

В firefox текст комментария виден нормально и в теге и вне его.

Волгоградец 07.06.2011 15:02

Ну дык надо его на сцену добавить.

Korchy 07.06.2011 16:21

Цитата:

Сообщение от Волгоградец (Сообщение 1001829)
Ну дык надо его на сцену добавить.

Код AS3:

package Tmp {
//-----------------------------------------------------------------------------------------------------
        import flash.geom.*;
        import flash.display.*;
//-----------------------------------------------------------------------------------------------------
        public class Tmp extends Sprite {
//-----------------------------------------------------------------------------------------------------
                private var a:Sprite;
//-----------------------------------------------------------------------------------------------------
                public function Tmp() {
 
                        const a:Sprite = new Sprite();
                        const g:Graphics = a.graphics;
                        g.drawRect(0, 0, 100, 100); // Начнем иметь размер. Тест.
                        addChild(a);
                        trace(transform.matrix.toString());
                        trace(transform.concatenatedMatrix.toString());
                        trace(a.transform.matrix.toString());
                        trace(a.transform.concatenatedMatrix.toString());
                }
        }
}

Да, добавление "а" в список отображения спасает ситуацию.
На выходе получается
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)
(a=1, b=0, c=0, d=1, tx=0, ty=0)

Но тогда вопрос: что, объект не добавленный в список отображения с матрицами взаимодействовать не может? Потому как если я сначала захочу переместить его а потом добавить в список - я получу перемещение в пять раз большее чем хотел.

Волгоградец 07.06.2011 16:29

Ну, во-первых, не перемещение, а масштаб. Во-вторых, зачем вообще использовать визуальный объект вне списка отображения - т.е. как только ты добавишь его в дисплей лист - все встанет на свои места. В-третьих, почему не может взаимодействовать с матрицами? Делай какие угодно операции - просто concatenatedMatrix - это совокупность матриц парентов - но т.к. парентов нет - то имеем этот баг - наверняка он в джире есть - лень лезть.

Upd.: залез-таки ) https://bugs.adobe.com/jira/browse/FP-7003

Korchy 07.06.2011 17:53

Цитата:

Сообщение от Волгоградец (Сообщение 1001856)
Ну, во-первых, не перемещение, а масштаб. Во-вторых, зачем вообще использовать визуальный объект вне списка отображения - т.е. как только ты добавишь его в дисплей лист - все встанет на свои места. В-третьих, почему не может взаимодействовать с матрицами? Делай какие угодно операции - просто concatenatedMatrix - это совокупность матриц парентов - но т.к. парентов нет - то имеем этот баг - наверняка он в джире есть - лень лезть.

Upd.: залез-таки ) https://bugs.adobe.com/jira/browse/FP-7003

Я перемещаю объекты за центр (так удобнее т.к. это круглые спарйты) поэтому имея такую матрицу при недобавлвенном объекте я получаю вектор в его центр увеличенным в 5 раз, соответственно при перемещении получаю совершенно не то что нужно.
В общем получается это баг и его нужно учитывать.
Спасибо за ссылку на описание бага.


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

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