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

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

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

Регистрация: Mar 2015
Сообщений: 23
Question Вращение рукоятки (количество оборотов)

Доброго времени суток!
Стала задача сделать многооборотную рукоятку, которую можно вращать мышкой (вокруг своей оси).
Саму по себе рукоятку сделал, вращается, но чтот никак не могу понять, как считать обороты, наткнулся на такой подводный камень:
- во время вращения, угол вращения (в моем случае это значение Т4) перескакивает хаотично, бывают повторы одного и того же угла - в зависимости от того, на сколько плавно вести мышкой. Следовательно невозможно отследить точный угол (значение Т4), при котором программа поймет, что произошел полный оборот. Например, я указал, что если значение == 100, то оборот ++, но можно так вращать, что значение 100 проскочит, да еще и если повращать по-диджейски, т.е. туда-сюда с небольшим углом, то счетчик поворотов будет считать лишь переходы с 99 на 100 и с 0 на 100, что не катит
Подскажите, как организовать что бы при вращении вне зависимости от скорости и плавности моя переменная T4 принимала все целые значения угла полного оборота.
архив с флешкой и исходником encoder.rar

Код AS3:
stop();
 
encoder.addEventListener(MouseEvent.MOUSE_DOWN, down_mouse); //слушаем нажатие мышкой на рукоятку
encoder.addEventListener(MouseEvent.MOUSE_UP, up_mouse); //слушаем отпускание мышки над рукояткой
encoder.addEventListener(MouseEvent.MOUSE_OUT, out_mouse); //слушаем уведения мышки с рукоятки
 
var angle: Number;
var start_angle: Number;
var oborot: Number = -1;
 
oborot_scr.text = "0";
 
function down_mouse(event: MouseEvent) {
	encoder.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
	var ex: Number = mouseX - encoder.x;
	var ey: Number = mouseY - encoder.y;
	start_angle = Math.atan2(ey, ex) * 180 / Math.PI;
}
 
function up_mouse(event: MouseEvent) {
	encoder.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
}
 
function out_mouse(event: MouseEvent) {
	encoder.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
}
 
function moveHandler(event: MouseEvent) {
 
	var dx: Number = mouseX - encoder.x;
	var dy: Number = mouseY - encoder.y;
 
	angle = (Math.atan2(dy, dx)) * 180 / Math.PI;
	encoder.rotation += (angle - start_angle);
 
	var T2: Number = encoder.rotation;
	var T3: Number = Math.floor(T2);
 
	//обратный ход
	if (T3 <= 0) {
		T3 = 180 + (180 + T3);
	}
 
	//делитель числа полного оборота
	var T4: Number = Math.floor(100 * (T3 / 360));
 
	// проход круга
	if (T4 == 0) {
		oborot++;
		oborot_scr.text = "" + oborot;
	}
	deg_scr.text = "" + T4;
 
	// коррекция угла для следующего хвата, что бы не прыгало
	start_angle = angle;
}

Создать новую тему   Часовой пояс 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.