![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Как правильно вращать спрайт вокруг центра, чтобы в его чайлдах трансформация тоже отражалась адекватно?
Например есть два спрайта: желтый круг и желтая окружность. Оба 50х50. Оба помещены в центр сцены. Желтый круг - чайлд сцены, желтая окружность - чайлд желтого круга. Поворачиваю круг на 90 градусов вокруг его центра. Он поворачивается правильно, но за счет того (насколько я понял) что матрица считается для левого верхнего угла, появляется смещение, которое наследует его чайлд (окружность) и за счет этого она убегает в сторону. На левой части рисунка показано, как они располагались до вращения, на правой - после. Как компенсировать появляющееся смещение? Вращение делается переносом центра спрайта в 0, поворотом, возвращением обратно: Krug.RotateAround(Krug.GetPosition(),new pNumber(90),true); internal function RotateAround(Axis:Vector2,Angle:pNumber,Once:Boolean):Boolean { var End:Boolean = Once; var MoveVector:Vector2 = new Vector2(); Vector2.Vec2Subtract(Axis,new Vector2(0.0,0.0),MoveVector); var matrix:Matrix = new Matrix(); matrix.identity(); matrix.translate(MoveVector.x,MoveVector.y); CountWorldMatrix(null,matrix,null); var RotAngle:Number = Angle.v; if(Once==false) { } RotAngle *= Math.PI/180.0; var Rot:Matrix = new Matrix(); Rot.identity(); Rot.rotate(RotAngle); CountWorldMatrix(null,Rot,null); matrix.identity(); matrix.translate(Axis.x,Axis.y); CountWorldMatrix(null,matrix,null); return End; } pNumber - переопределенный Number Vector2 - переопределенный Point GetPosition() - координаты центра спрайта в системе координат сцены Последний раз редактировалось Korchy; 04.07.2011 в 18:24. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
У страйта нет центра. Есть точка регистрации. Чтобы объекты вращались адекватно, нужно добавлять их в соответствующие позиции. Например, для круга 50х50, координаты х и у должны быть -25, -25. Т.е. так, чтобы центр круга, располагался ровно в точке регистрации спрайта (ну или другого DisplayObjectContainer'а)
|
|
|||||
|
Вот тут наперекор одному нашему форумному товарищу создали темку в блогах.
__________________
тут я |
|
|||||
|
С этого момента поподробнее пожалуйста. Почему "минус" 25 ? В момент создания спрайта его локальная система координат будет совпадать с глобальной т.е. левый верхний угол находиться в точке 0,0 и единичная матрица трансформации. Вектор совпадающий с центром спрайта тогда будет 25,25.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
|
|
|||||
|
Цитата:
Добавлено через 11 минут Цитата:
Точка регистрации 0,0, спрайт 50х50 - соотв. центр 25,25. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|