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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 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;
}

Создать новую тему   Часовой пояс GMT +4, время: 15:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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