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

Регистрация: Aug 2011
Сообщений: 29
По умолчанию плавный Drag rotation

Привет, пробую реализовать вращение объекта драгом.
Легко сделать, чтобы объект всегда следил за курсором, но мне нужно порционное движение при нажатой мышке.

Как когда пальцем крутишь пластинку на граммофоне.

Для этого напиал следующий код, но запутался, когда и что надо обновлять, подскажите, пожалуйста.

В интернете нашел только либо простые следящие драги, либо handle, которая по сути тоже просто прыгает на курсор при клике.

Попытался изобразить на схеме, что я делаю в коде.

В аттаче файл сцены.


[IMG]http://img440.**************/img440/9692/schemeh.jpg[/IMG]

Код AS3:
var CurX:Number=0;
var CurY:Number=0;
var GunX:Number=0;
var GunY:Number=0;
 
var lengthT:Number=0;
var heightT:Number=0;
 
var angleActual:Number=0;
var anglePast:Number=0;
var angle2rotate:Number=0;
 
 
 
 
GunX=round.x;
GunY=round.y;
 
 
var clicked:Boolean=false;
stage.addEventListener (MouseEvent.MOUSE_DOWN , mouseDownFunc);
 
function mouseDownFunc(e:MouseEvent):Boolean
{
	clicked=true;
 
	return clicked;
 
 
 
}
 
stage.addEventListener (MouseEvent.MOUSE_UP , mouseUpFunc);
 
function mouseUpFunc(e:MouseEvent):Boolean
{
	clicked=false;
 
	return clicked;
}
 
 
addEventListener(Event.ENTER_FRAME, frameUpdate);
function frameUpdate(e:Event):void  
{
	if(clicked)
	{
		lengthT=Math.floor(stage.mouseX-GunX);
		heightT=-(Math.floor(stage.mouseY-GunY));
 
		trace("lengthT",lengthT);
		trace("heightT",heightT);
 
		anglePast=angleActual;
		trace("anglePast",anglePast);
		angleActual=(Math.atan2(lengthT,heightT))*180/Math.PI;
		trace("аngleActual",angleActual);
		angle2rotate=angleActual-anglePast;
		trace("angle2rotate",angle2rotate);
		round.rotation+=angle2rotate;
 
	}
 
 
 
 
 
 
}

Спасибо!
Вложения
Тип файла: zip test1.zip (5.7 Кб, 49 просмотров)