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

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

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

Регистрация: Mar 2015
Сообщений: 23
Цитата:
Сообщение от samana Посмотреть сообщение
Вдруг поможет
я неопытный в AS3, внедрить кусками в свою программу не удалось, немного непонятен алгоритм, был бы очень благодарен если бы Вы пояснили в двух словах. Суть ведь одна - рассчитать угол хвата, затем угол между точкой хвата и динамически меняющегося поворотом рукоятки, так?
Пытался запустить код как класс - ничего не происходит, что должно быть в fla-файле? не могли бы ли Вы поделиться таковым?

Старый 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;
}

Старый 16.03.2015, 22:59
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 13  
Ответить с цитированием
zslavman

Регистрация: Mar 2015
Сообщений: 23
samana, премного благодарен! всё заработало, смотрю, даже коррекцию что бы не прыгало при хвате ввели

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
даже коррекцию что бы не прыгало при хвате ввели
Да, просто забыл о ней в первом варианте, а тут сама судьба вернула меня, чтобы исправится)

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

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

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


 


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


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