Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 04.07.2011, 18:21
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 1  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
По умолчанию Как правильно вращать спрайт вокруг центра?

Как правильно вращать спрайт вокруг центра, чтобы в его чайлдах трансформация тоже отражалась адекватно?
Например есть два спрайта: желтый круг и желтая окружность. Оба 50х50. Оба помещены в центр сцены. Желтый круг - чайлд сцены, желтая окружность - чайлд желтого круга. Поворачиваю круг на 90 градусов вокруг его центра. Он поворачивается правильно, но за счет того (насколько я понял) что матрица считается для левого верхнего угла, появляется смещение, которое наследует его чайлд (окружность) и за счет этого она убегает в сторону. На левой части рисунка показано, как они располагались до вращения, на правой - после. Как компенсировать появляющееся смещение?
Вращение делается переносом центра спрайта в 0, поворотом, возвращением обратно:
Код AS3:
 
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;
		}
CountWorldMatrix - умножение матрицы объекта на передаваемую
pNumber - переопределенный Number
Vector2 - переопределенный Point
GetPosition() - координаты центра спрайта в системе координат сцены
Изображения
 


Последний раз редактировалось Korchy; 04.07.2011 в 18:24.
Создать новую тему   Часовой пояс GMT +4, время: 05:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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