Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2010, 18:15   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Разворот объекта к мышке

Здравствуйте.
Возникла задача, для которой моих знаний геометрии маловато.
Собственно:
Пусть есть x, y, w, h, a - соответственно координаты x и y, длина, высота и угол некоторого квадрата(далее объект).
Есть функция setAngle(Object* obj, double angle), которая поворачивает объекты на angle градусов против часовой стрелки(минусовые значения по часовой).
Есть координаты мыши, пусть mx, my.
Необходимо:
1) Развернуть объект к мыши лицом(или хоть чем-нибудь)
2) Задать движение пули по вектору направленному от объекты к мыши.(пуля имеет также bx,by,bw,bh,ba. Необходима функция, которая на каждом шаге будет двигать пулю)

Буду рад примеру на любом языке или формуле.
Заранее благодарен, Ваш %username%
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 07.08.2010, 18:23   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Делаю игру на XNA, вот код, все углы в радианах.
Разворот обьекта
Код:
public static float TurnToFace(Vector2 position, Vector2 faceThis,
           float currentAngle, float turnSpeed)
        {
            float desiredAngle = (float)Math.Atan2(faceThis.Y - position.Y, faceThis.X - position.X);
            float difference = WrapAngle(desiredAngle - currentAngle);
            difference = MathHelper.Clamp(difference, -turnSpeed, turnSpeed);
            return WrapAngle(currentAngle + difference);
        }

        private static float WrapAngle(float radians)
        {
            while (radians < -MathHelper.Pi)
            {
                radians += MathHelper.TwoPi;
            }
            while (radians > MathHelper.Pi)
            {
                radians -= MathHelper.TwoPi;
            }
            return radians;
        }
Движение по вектору
Код:
Vector2 newpos = pos + new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)) * speed;
ZaRDaK вне форума Ответить с цитированием
Старый 07.08.2010, 18:25   #3
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Не совсем понятно что требуется, но думаю это вам точно пригодится:
http://ru.wikipedia.org/wiki/Матрица_поворота
И поищите пермножение матрицы и вектора.
Так можно имея матрицу поворота (созданную по углам) и координату, повернуть координату на угол.

Например, имея вектор координаты мыши, вычисляем вектор разницы положения объекта и мыши. Нормализуем. Это направляющий вектор абсолютного поворота. Считаем разницу углов нужного и текущего поворота, строим матрицу по формуле из википедии, перемножаем вершины объекта с матрицей. Счастье пришло)
Или имея тот самый угол вызываем вашу процедуру вращения..
А что вообще за библиотека/движок?
Изобретатель велосипедов

Последний раз редактировалось Selestis; 07.08.2010 в 18:32.
Selestis вне форума Ответить с цитированием
Старый 07.08.2010, 19:00   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

ZaRDaK, спасибо, самое оно, немного переписал под с++ и нормально работает.
Плюс поставил.
Selestis, спасибо, вам тоже поставлю. А движок - SDL.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi, разворот прямоугольника KaZaaM Помощь студентам 3 25.05.2010 08:53
Как заставить ролик на мышке двигать полосой прокрутки clanz Microsoft Office Access 4 28.02.2010 16:41
Си, рекурсивный разворот списка 30MBU Помощь студентам 3 01.12.2009 17:20
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene DomKr@t Мультимедиа в Delphi 0 14.12.2008 01:52