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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Вдруг поможет

Rotatevolume.swf   (33.2 Кб)


Код AS3:
package
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author samana
	 */
	public class Regulator extends Sprite
	{
 
		[Embed(source="../images/image2.jpg")]
		private var ImageClass:Class;
 
		private var _bm:Bitmap;
		private var _rotationValue:Number = 0;
 
		public function Regulator()
		{
			_bm = new ImageClass();
			_bm.x -= _bm.width / 2;
			_bm.y -= _bm.height / 2;
			_bm.smoothing = true;
 
			addChild(_bm);
 
			addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
 
		}
 
		private function mouseDown(e:MouseEvent):void
		{
			stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
			stage.addEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
		}
 
		private function stage_middleMouseUp(e:MouseEvent):void
		{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
			stage.removeEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
		}
 
		private function stage_mouseMove(e:MouseEvent):void
		{
			var oldAng:Number = rotation;
 
			var dx:Number = e.stageX - x;
			var dy:Number = e.stageY - y;
			rotation = Math.atan2(dy, dx) * 180 / Math.PI;
 
			_rotationValue += diffAngles(oldAng, rotation, false);
		}
 
		/**
		 * Вернуть разницу между углами в радианах или грудусах. Приоритет в меньшую сторону круга.
		 * Сколько нужно добавить или отнять у угла ang1 чтобы он стал равен ang2
		 * @param	ang1 первый угол
		 * @param	ang2 второй угол
		 * @param 	inRadian переданные углы и возвращаемое значение в радианах, иначе в градусах
		 * @return	возвращает разницу
		 */
		private 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;
		}
 
 
		public function get rotationValue():int 
		{
			return _rotationValue;
		}
 
 
 
	}
 
}
Вложения
Тип файла: swf Rotatevolume.swf (33.2 Кб, 164 просмотров)