Показать сообщение отдельно
Старый 12.08.2015, 14:44
Bazel вне форума Посмотреть профиль Отправить личное сообщение для Bazel Найти все сообщения от Bazel
  № 1  
Ответить с цитированием
Bazel

Регистрация: Feb 2011
Сообщений: 117
По умолчанию вращение и передвижение

Да простят меня админы, создаю еще одну тему.

Задача следующая, есть спрайт, который постоянно движется и вращается.
У нас есть таймер, к нему привязана функция которая через определенные промежутки времени вызывает вращение спрайта а затем перемещение. Все.
Проблема в том, что спрайт отлично вращается если мы не задаем никакую скорость по x и y осям. Или если нет вращения, то отлично передвигается. Но если спрайту нужно передвинуться и повернуться во время движения, тут он начинает неадекватно двигаться.

На форуме добрые люди помогли разобраться с вращением, оно выглядит так :

Код AS3:
public function rotateAroundCenter(object:DisplayObject, angle:Number):void 
{ 
 
 
	var center : Point = new Point(X,Y) ;
	angle += object.rotation;
        var a0:Number = - object.rotation * Math.PI / 180;
        var s0:Number = Math.sin(a0);
        var c0:Number = Math.cos(a0);
        var dX0:Number = object.x - center.x;
        var dY0:Number = object.y - center.y;
 
        object.rotation = 0;
        object.x = Math.round(center.x + dX0 * c0 - dY0 * s0);
        object.y = Math.round(center.y + dX0 * s0 + dY0 * c0);
 
        // new rotation
        var r:Number = angle * Math.PI / 180;
        var s:Number = Math.sin(r);
        var c:Number = Math.cos(r);
        var dX:Number = object.x - center.x;
        var dY:Number = object.y - center.y;
 
        object.rotation += angle;
        object.x = center.x + dX * c - dY * s;
        object.y = center.y + dX * s + dY * c;
 
	trace("object.x,object.y=",object.x,object.y) ;    
 
 
 
}
а перемещаем еще проще
Код AS3:
 
        X+=Number(Vx) ;   //скорость по Х
	Y+=Number(Vy) ;  // скорость по У
	trace("object.x0=",object.x);
	object.x+=Vx;
	object.x+=Vy;
Движение получается кривым. тут скорость по X и Y 1 и угловая скорость равна 1, а во втором случае просто вращаем тело, все работает. Гуглил, не очень помогло,буду еще гуглить, может кто-то сталкивался с похожей проблемой. Заранее спасибо!
Вложения
Тип файла: swf rectangle.swf (15.9 Кб, 284 просмотров)
Тип файла: swf true rotation.swf (15.9 Кб, 274 просмотров)


Последний раз редактировалось Bazel; 12.08.2015 в 15:05.