Простейший пример, который показывает, что concatenatedmatrix у спрайта, который не имеет parent’а, не является единичной:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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()); vtrace(a.transform.concatenatedMatrix.toString()); } } } |
1 2 3 4 |
(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) |
Матрица приобретает нормальное значение про добавлении спрайта в сцену:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package Tmp { import flash.display.Sprite; public class Tmp extends Sprite { private var a:Sprite; public function Tmp() { a = new Sprite(); addChild(a); trace(transform.matrix.toString()); trace(transform.concatenatedMatrix.toString()); trace(a.transform.matrix.toString()); trace(a.transform.concatenatedMatrix.toString()); } } } |
1 2 3 4 |
(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) |
Хотя этот момент описан в баг-репорте Adobe, он не является очевидным и способен доставить определенные трудности при отладке.
Поэтому, если в проекте используются трансформации объектов с помощью матричных преобразований, необходимо соблюдать правило: никаких трансформаций до включения спрайта в сцену.