Показать сообщение отдельно
Старый 16.03.2015, 22:08
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 12  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
У меня нет Flash IDE чтобы создать там fla, но если я ничего не упустил, то код в кадре будет примерно таким:
Код AS3:
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
 
var _offset:Number = 0;
var _rotationValue:Number = 0;
 
var _sprite:Sprite = new Sprite(); // это ваш объект, который нужно поворачивать
_sprite.x = 150;
_sprite.y = 150;
 
addChild(_sprite);
 
_sprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
 
 
function mouseDown(e:MouseEvent):void
{
	stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
	stage.addEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
 
	var dx:Number = e.stageX - _sprite.x;
	var dy:Number = e.stageY - _sprite.y;
	_offset = diffAngles((Math.atan2(dy, dx) * 180 / Math.PI), _sprite.rotation,  false);
}
 
function stage_middleMouseUp(e:MouseEvent):void
{
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
	stage.removeEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
}
 
function stage_mouseMove(e:MouseEvent):void
{
	var oldAng:Number = _sprite.rotation;
 
	var dx:Number = e.stageX - _sprite.x;
	var dy:Number = e.stageY - _sprite.y;
	_sprite.rotation = (Math.atan2(dy, dx) * 180 / Math.PI) + _offset;
 
	_rotationValue += diffAngles(oldAng, _sprite.rotation, false);
 
	trace("-----------------------");
	trace("кол-во полных оборотов", int(_rotationValue / 360));
	trace("текущий поворот", int(_rotationValue % 360));
}
 
function diffAngles(ang1:Number, ang2:Number, inRadian:Boolean = true):Number
{
	var diff:Number;
 
	if (inRadian)
	{
		//convert to  0 - Math.PI*2
		// 3.141592653589793 = Math.PI;
		// 6.283185307179586 = Math.PI*2;
		if (ang1 < 0)
			ang1 = 6.283185307179586 - (ang1 * -1); //to abs
		if (ang2 < 0)
			ang2 = 6.283185307179586 - (ang2 * -1); //to abs
 
		diff = ang2 - ang1;
 
		if (diff > 3.141592653589793)
			diff -= 6.283185307179586;
		else if (diff < -3.141592653589793)
			diff += 6.283185307179586;
	}
	else
	{
		//convert to  0-360
		if (ang1 < 0)
			ang1 = 360 - (ang1 * -1); //to abs
		if (ang2 < 0)
			ang2 = 360 - (ang2 * -1); //to abs
 
		diff = ang2 - ang1;
 
		if (diff > 180)
			diff -= 360;
		if (diff < -180)
			diff += 360;
	}
 
	return diff;
}