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

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

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

Регистрация: Sep 2009
Адрес: X = 10, Y = 420, Z = -35
Сообщений: 52
Отправить сообщение для Neirol с помощью ICQ Отправить сообщение для Neirol с помощью Skype™
Attention Поворот объекта по направлению его движения, как?

Есть стрелообразный объект mouse.
Он играет роль мышки, т.е. mouse.startDrag(true), а мышку мы скрываем, т.е. Mouse.hide().
Вопрос в том, как повернуть mouse в ту сторону, в которую он движется?
Т.е. скажем если я двигаю мышкой вниз, следовательно и hero движется в низ, hero должен повернуться на 90 градусов, т.е. смотреть вниз.
Если я двигаю вверх, то соответственно hero смотрит вверх.
Причем движение может происходить по любому направлению, следовательно ограничеваться по 4 направлениям нельзя.

У меня появилась такая идея.

Код AS3:
Mouse.hide();
mouse.startDrag(true);
 
var mouseOldX:Number = 0;
var mouseOldY:Number = 0;
 
stage.addEventListener(Event.ENTER_FRAME, rotating);
 
function rotating(e:Event):void {
    var diffX:Number = mouseX - mouseOldX;
    var diffY:Number = mouseY - mouseOldY;
    var rAngle:Number = Math.atan2(diffY, diffX);
 
    mouse.rotation = rAngle * 180 / Math.PI;
 
    mouseOldX = mouse.x;
    mouseOldY = mouse.y;
}
Но mouse в итоге бешенно крутится в несоответствующие стороны.
Помогите пожалуйста.

Старый 29.09.2009, 18:40
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
двигай не по энтерфрэйму а по MouseEvent.MOUSE_MOVE
__________________
Отряд Котовскага

Старый 29.09.2009, 18:51
Neirol вне форума Посмотреть профиль Отправить личное сообщение для Neirol Посетить домашнюю страницу Neirol Найти все сообщения от Neirol
  № 3  
Ответить с цитированием
Neirol
 
Аватар для Neirol

Регистрация: Sep 2009
Адрес: X = 10, Y = 420, Z = -35
Сообщений: 52
Отправить сообщение для Neirol с помощью ICQ Отправить сообщение для Neirol с помощью Skype™
Спасибо.
Все стало почти ОК, кроме того, что стрелка врала на 90 градусов (я просто их добавил).
Теперь она поворачивается в нужную сторону, но все раво иногда дергается.

Залил результат - http://dump.ru/file/3497107

Добавлено через 34 минуты
Немножко поменял, определение переменных, добавил новые, и объявил ограничение по установке нового ракурса.

Получилось:
Код AS3:
Mouse.hide();
mouse.startDrag(true);
 
var mouseOldX:Number = 0;
var mouseOldY:Number = 0;
var diffX:Number;
var diffY:Number;
var restriction:Number = 1.2;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, rotating);
 
function rotating(e:MouseEvent):void {
    var resultX = mouseX - mouseOldX;
    var resultY = mouseY - mouseOldY;
 
    if(resultX > restriction || resultX < -restriction) diffX = resultX;
    if(resultY > restriction || resultY < -restriction) diffY = resultY;
    var rAngle:Number = Math.atan2(diffY, diffX);
 
    mouse.rotation = rAngle * 180 / Math.PI + 90;
 
    mouseOldX = mouse.x;
    mouseOldY = mouse.y;
}
Стало гораздо лучше, но все таки не идеально.
Кто може подсказать ошибки, подскажите пожалуйста.

Добавлено через 40 минут
Сам догадался до своей ошибки.
Нужно было старые координаты определять при каждом кадре, а они обновлялись в том же эвенте где и происходило все остальное.
Ну и увеличил теперь немножко ограничение (restriction).

Код AS3:
Mouse.hide();
mouse.startDrag(true);
 
var mouseOldX:Number = 0;
var mouseOldY:Number = 0;
var diffX:Number;
var diffY:Number;
var restriction:Number = 2;
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, rotating);
stage.addEventListener(Event.ENTER_FRAME, oldSetting);
 
function oldSetting(e:Event):void {
    mouseOldX = mouse.x;
    mouseOldY = mouse.y;
}
 
function rotating(e:MouseEvent):void {
    var resultX = mouseX - mouseOldX;
    var resultY = mouseY - mouseOldY;
 
    if(resultX > restriction || resultX < -restriction) diffX = resultX;
    if(resultY > restriction || resultY < -restriction) diffY = resultY;
    var rAngle:Number = Math.atan2(diffY, diffX);
 
    mouse.rotation = rAngle * 180 / Math.PI + 90;
}
Кстати, забыл сказать что укоротил немножко хвост мышки, он у меня был - ну слишком длинный.
Вот теперь стало действительно идеально, насколько это можно сделать моим способом и с моими знаниями.
Может все таки заметите еще что-нибудь
__________________
Рожденный ползать, везде пролезет...

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

Теги
движение , как , направление , объект , поворот
Опции темы
Опции просмотра

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

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


 


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


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