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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.07.2012, 12:57
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 1  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
По умолчанию Вращение объекта вне зависимости от положения курсора относительно него

Здравствуйте. Существует код вращения объекта вокруг своей оси вслед за курсором:
Код AS3:
var dy:Number = mouseY - obj.y;   
var dx:Number = mouseX - obj.x;   
var radians:Number = Math.atan2(dy,dx);   
var degrees:Number = radians / (Math.PI / 180); 
obj.rotation = degrees;
В этом коде все хорошо, но курсор приходится перемещать вокруг объекта, а требуется, чтобы вращение осуществлялось вне зависимости от положения курсора относительно объекта. То-есть если где-то на сцене совершается вращательное движение курсором, то объект вращается вслед за ним. Как реализовать подобное?

Старый 09.07.2012, 13:07
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Вероятно что функция-обработчик событий мыши подписана на сам объект, а должна быть подписана например на stage
__________________
adobe AS3 manual

Старый 09.07.2012, 13:10
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А по-моему все нормально подписано. Если я правильно понял, автору нужно вращать курсором где-то вообще в стороне от объекта, и чтобы объект при этом так же крутился. Т.е. не смотрел постоянно на курсор, а просто повторял его движения.

Первое что приходит в голову, покадрово записывать положения мыши, сравнивать предыдущее положение с текущим, и по этим параметрам определять направление вращения. А по разнице величин определять скорость вращения.

Старый 09.07.2012, 13:46
Storfus13 вне форума Посмотреть профиль Отправить личное сообщение для Storfus13 Найти все сообщения от Storfus13
  № 4  
Ответить с цитированием
Storfus13
 
Аватар для Storfus13

Регистрация: Jan 2012
Сообщений: 26
Записей в блоге: 1
Попробуйте так
Код AS3:
var moldX:Number = 0;
var moldY:Number = 0;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, objMove);
function objMove(e:MouseEvent):void{
 
var dy:Number = (mouseY - moldY) * 20;   
var dx:Number = (mouseX - moldX) * 20;   
if(dy == 0 || dx == 0)
	return;
var radians:Number = Math.atan2(dy,dx);   
var degrees:Number = radians / (Math.PI / 180); 
obj.rotation = degrees / 2;
 
moldY = mouseY;
moldX = mouseX;
}
Коэффициенты 20 и 2 для сглаживания дерганья объекта при малом смещении курсора. Правильнее их вычислять в зависимости от движения курсора, как предложено в предыдущем посте.
__________________
Кто хочет, тот ищет способ, а кто не хочет - тот ищет причину!


Последний раз редактировалось Storfus13; 09.07.2012 в 13:49.
Старый 09.07.2012, 14:09
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 5  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
Storfus13, Спасибо, работает, правда очень дёргано, если курсор двигать медленно, даже со "сглаживанием", попробую использовать твины.

Старый 09.07.2012, 15:31
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Так постабильнее (вычисляет направление вращения по 3-м точкам):
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private var _object:Sprite;
 
		private function init(e:Event = null):void 
		{
			_object = new Sprite();
			_object.graphics.lineStyle(1, 0xff0000);
			_object.graphics.lineTo(100, 100);
			_object.x = 250;
			_object.y = 250;
			addChild(_object);
 
			_rotation = _object.rotation;
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}
 
		private var _points:Array = [];
		private var _rotation:Number;
 
		private function onMouseMove(event:MouseEvent):void
		{		 
			_points.push(new Point(mouseX, mouseY));
			if (_points.length < 4)
			{
				return;
			}
			if (_points.length > 4)
			{
				_points.shift();
			}
			var p0:Point = _points[0];
			var p1:Point = _points[1];
			var p2:Point = _points[2];
			var p3:Point = _points[3];
			var p01xp12:Number = (p1.x - p0.x) * (p2.y - p1.y) - (p1.y - p0.y) * (p2.x - p1.x);
			var p12xp23:Number = (p2.x - p1.x) * (p3.y - p2.y) - (p2.y - p1.y) * (p3.x - p2.x);
			_rotation += (p01xp12 + p12xp23) * .5;
			_object.rotation = _rotation;
		}
 
	}
 
}
Наверно тут нужно еще условный радиус учитывать, по которому в текущий момент вращают мышку


Последний раз редактировалось expl; 09.07.2012 в 15:33.
Старый 09.07.2012, 16:03
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 7  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
Работает, но тоже как-то странно (то очень резко, то медленно). Вообще основная идея - сделать окно принятия решения как в игре Mass Effect:
http://www.cravingtech.com/blog/wp-c.../2008/06/2.jpg
Там курсор вращается очень плавно. Есть идеи как это сделано?

Старый 09.07.2012, 16:47
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Описывая анимацию давать ссылку на статическую картинку - это 5 баллов. Я понимаю, конечно, что 50% населения обязано было в нее играть, но от этого проще не становится.

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

Регистрация: Aug 2007
Сообщений: 168
Виноват, объясняю принцип работы:
В центре снизу расположено колесо состоящее из 6-ти сегментов, в его центре - курсор, при совершении вращательных движений мышью он вращается от сегмента к сегменту относительно центра колеса, по часовой или против часовой стрелки, в зависимости от движения мыши. Вращается плавно, без рывков. Начиная с некоторого небольшого радиуса (около 30 пикселов), скорость вращения не зависит от размера описываемых мышью кругов, один круг мышью - один полный поворот курсора на 360*. Если же описываемый круг имеет радиус меньше 30 пикселов, то вращение практически не происходит. Тот сегмент, на который направлен курсор - подсвечивается, так-же как и соответствующая сегменту надпись (вариант ответа). При клике левой кнопкой происходит выполнение действия назначенного на подсвеченный вариант, и диалог пропадает. Вроде всё

Еще одна версия диалога: http://gamepart.ru/sites/default/fil...ect-325695.jpg

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

Регистрация: Jun 2012
Сообщений: 70
Тоже возникла сейчас такая задача.
Приведенные выше методы, работают не так, как хочется.
__________________
Блог: http://devizgl.blogspot.com/

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

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

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


 


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


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