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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.12.2011, 15:02
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 11  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
Цитата:
Сообщение от lovik Посмотреть сообщение
доброго времени суток
Если вас не затруднит распишите подробно формулу вычисления угла поворота объекта в зависимости от положения мыши и что надо увеличивать по событию ентер фрейм чтоб оно двигалось поскольку чет у меня нечего не получается

заранее спасибо


round.rotation = Math.atan2(mouseY - round.y, mouseX - round.x) * 180 / Math.PI;

где :

Math.atan2(mouseY - round.y, mouseX - round.x) - формула вычисления угла через его тангенс.

mouseY - координата курсора по Y, round.y - координата центра объекта по Y ( вместо round - имя вашего объекта или указатель и тоже самое с X )

*180 / Math.PI
- перевод радианы в градусы

Старый 22.12.2011, 15:30
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 12  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
вроде как сама ф-ция Math.atan2 уже переводит в радианы.

Старый 22.12.2011, 15:32
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 13  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
Цитата:
Сообщение от t4arty Посмотреть сообщение
вроде как сама ф-ция Math.atan2 уже переводит в радианы.
atan2(y, x) is the angle in radians between the positive x-axis of a plane and the point given by the coordinates (x, y) on it.

да, а нам для поворота нужны градусы.

Старый 22.12.2011, 19:07
lovik вне форума Посмотреть профиль Отправить личное сообщение для lovik Найти все сообщения от lovik
  № 14  
Ответить с цитированием
lovik
[+1 03.01.12]
[++1 03.01.12]

Регистрация: Dec 2011
Сообщений: 29
Код AS3:
import flash.events.MouseEvent;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, rotations);
 
function rotations (e:MouseEvent):void
{
 
fonar_mc.rotation = Math.atan2(mouseY - fonar_mc.y, mouseX - fonar_mc.x)* 180 / Math.PI;
 
}
вот такой код и вот так оно работает((
не пойму почему так (
как сделать чтоб этот фонарь указывал ровно на курсор мыши
Вложения
Тип файла: rar комната.rar (45.4 Кб, 27 просмотров)

Старый 22.12.2011, 19:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 15  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Knob.as
Код AS3:
package  
{
	import flash.display.GradientType;
	import flash.display.Graphics;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.BevelFilter;
	import flash.filters.DropShadowFilter;
	import flash.geom.Matrix;
	import flash.geom.Point;
 
	public class Knob extends Sprite 
	{
		private const RAD:Number = Math.PI / 180;
		private var _knob:Sprite;
		private var _knobAngleLast:Number = 0;
		private var _handAngleStart:Number;
 
		public function Knob() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			//// Шкала 25 рисок
			var scal:Shape = new Shape();
			var sg:Graphics = scal.graphics;
			sg.lineStyle(2, 0x666666);
			for (var s:uint = 0; s < 250; s += 10)
			{
				var angle:Number = (150 + s) * RAD
				var sp:Point = Point.polar(60, angle);
				var sp2:Point = Point.polar(s % 20 ? 65 : 70, angle);
				sg.moveTo(sp.x, sp.y);
				sg.lineTo(sp2.x, sp2.y);
			}	
			addChild(scal);
			//// Ручка
			_knob = new Sprite();
			addChild(_knob);
			var g:Graphics = _knob.graphics;
			g.beginFill(0x000000);
			for (var i:uint = 0; i < 360; i += 30)
			{
				var p:Point = Point.polar(45, i * RAD);
				g.drawCircle(p.x, p.y, 10);
			}
			g.beginFill(0x000000);
			g.drawCircle(0, 0, 50);
			var matrix:Matrix = new Matrix();
			matrix.createGradientBox(94, 94, 0, -47, -47);
			g.beginGradientFill(GradientType.RADIAL, [0x000000, 0x101010], [1, 1], [210, 255], matrix);
			g.drawCircle(0, 0, 48);
			//// Риска на ручке, под 150 град для простоты расчета ограничения вращения
			var p1:Point = Point.polar(20, 150 * RAD);
			var p2:Point = Point.polar(45, 150 * RAD);
			g.endFill();
			g.lineStyle(3, 0x333333);
			g.moveTo(p1.x, p1.y)
			g.lineTo(p2.x, p2.y);
			_knob.filters = [ new BevelFilter(25, 60, 0xFFFFFF, 0.5, 0x000000, 0.5, 25, 25, 0.5, 3), new DropShadowFilter(10, 60, 0x000000, 0.5, 12, 12, 1, 3) ];
			_knob.addEventListener(MouseEvent.MOUSE_DOWN, handlerDown);
		}
 
		private function handlerDown(event:MouseEvent):void 
		{
			_knobAngleLast = _knob.rotation;
			_handAngleStart = Math.atan2(mouseY, mouseX) / RAD;
			stage.addEventListener(MouseEvent.MOUSE_MOVE, handlerMove);
			stage.addEventListener(MouseEvent.MOUSE_UP, handlerUp);
		}
 
		private function handlerUp(event:MouseEvent):void 
		{
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, handlerMove);
			stage.removeEventListener(MouseEvent.MOUSE_UP, handlerUp);
		}
 
		private function handlerMove(event:MouseEvent):void 
		{
			var handAngle:Number = Math.atan2(mouseY, mouseX) / RAD;
			var delta:Number = _handAngleStart - handAngle;
			_handAngleStart = handAngle;
			_knob.rotation -= delta;
			if (_knob.rotation < 0 && _knob.rotation > -(360 - 240) )
			{
				_knob.rotation = _knobAngleLast;
			}
			else
			{
				_knobAngleLast = _knob.rotation;
			}
		}
	}
}
Main.as
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			this.graphics.beginFill(0x444444);
			this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			var knob:Knob = new Knob();
			addChild(knob);
			knob.x = knob.y = 200;
		}
	}
}
__________________
Reality.getBounds(this);

Старый 22.12.2011, 19:21
lovik вне форума Посмотреть профиль Отправить личное сообщение для lovik Найти все сообщения от lovik
  № 16  
Ответить с цитированием
lovik
[+1 03.01.12]
[++1 03.01.12]

Регистрация: Dec 2011
Сообщений: 29
сори я только начал учить as по сему если мона то четкое описание к этому всему кода много а что он делает понятно но смутно )

Старый 22.12.2011, 19:28
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 17  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
"кода много" только рисует. Что можно подробно описать про 10 строчек? Выше все уже описали.
И да, это был ответ (запозднившийся) топикстартеру, не Вам.
Просто чтобы был уже реальный рабочий пример "не прыгающего на мышку" drag rotation.
__________________
Reality.getBounds(this);

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

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

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


 


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


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