2010-02-12 2 views
1

Я пытаюсь создать игру, в которой пули могут летать в любом направлении. Я хотел бы сделать их векторами с направлением и величиной, чтобы заставить их идти в направлении. Я просто не знаю, как это реализовать?Помощь по векторам

Благодаря

+0

Вы хотите создать произвольные направления и векторы? – 2010-02-12 01:56:11

+0

Я хочу передать угол и величину в качестве параметров, по сути, пули, которые могут двигаться в любом направлении – jmasterx

+0

, если это пуля, вы не хотите величины. Вам нужна его позиция, направление, скорость и шаг времени (время с момента последнего обновления) – Craig

ответ

1

Есть две части, которые должны быть рассчитаны. Во-первых, я бы начал с общей дистанции. Это должно быть просто:

total_distance = velocity * time 

Предполагая, что это 2D игра, то вы должны использовать синусоидальной & косинус нарушить общее расстояние до в X и компоненты Y (для заданного угла):

distance_y = total_distance * sin(2 * pi * angle/360) 
distance_x = total_distance * cos(2 * pi * angle/360) 

Наконец, расстояние х/у, должна быть смещена на основе начальной позиции пули:

pos_x = distance_x + start_pos_x 
pos_y = distance_y + start_pos_y 

конечно, вы можете обернуть все это в хорошем классе, расширение & полировка при необходимости.

+0

Решив мою проблему, спасибо – jmasterx

+0

Это работает, но не лучшее решение. Также не учитывалась величина или направление. Имо оригинальный плакат нуждается в изучении некоторой векторной математики. – Craig

+1

Мои примерные уравнения действительно включают в себя как величину (скорость), так и направление (угол). Кроме того, из его комментариев он испытывал трудности с разбивкой вектора на свои компоненты X/Y, поэтому я попытался дать простой пример того, как это сделать. –

1

Вы могли бы иметь класс пуля, которая содержит положение, направление вектора, и скорость. Каждый раз вы можете обновить положение пули следующим образом:

position += direction * veclocity; 

Это предполагает, что направление было единичным вектором.

+0

Я не уверен, как это переводится в координаты X и Y? – jmasterx

+0

не забудьте разделить скорость по времени, иначе у вас будут сумасшедшие быстро движущиеся объекты. – Craig

+0

Но что такое «позиция», как я могу превратить это в координату x, y? – jmasterx

1

Я хотел бы создать начало что-то вроде этого:

struct Vector3f { 
    float x, y, z; 
}; 

struct Bullet { 
    Vector3f position; 
    Vector3f velocity; 
}; 

inline const Vector3f& Vector3f::operator+=(const Vector &other) 
{ 
    x += other.x; 
    y += other.y; 
    z += other.z; 
    return *this; 
} 

inline const Vector3f& Vector3f::operator*=(float v) 
{ 
    x *= v; 
    y *= v; 
    z *= v; 
    return *this; 
} 

Вы можете обновить позицию пули с bullet.position += velocity (сложением векторов осуществляется путем добавления компонентов по отдельности). Обратите внимание, что вектор скорости содержит как направление, так и скорость (= значение вектора).

И если ваша пуля должна замедляться в каждом кадре, вы можете сделать что-то вроде bullet.velocity *= 0.98 (где 0,98 представляет фракцию). Вектор умножение на скаляр производится путем умножения каждого компонента со скаляром ...

С уважением, Кристофа

+0

Спасибо! DirectX все имеет смысл сейчас! Я просто не уверен, как сделать угол, скажем, если я хочу, чтобы он путешествовал с 50 градусами – jmasterx

+0

Vector3f (0, 1, 0) означал бы, что вы путешествуете прямо вверх (при условии, что ось y указывает вверх) и Vector (1, 0, 0) может означать, что вы путешествуете влево. Если вы хотите путешествовать со скоростью 50 °, вы можете написать Vector (cos (50), sin (50), 0). – tux21b

0

это любое использование?

http://www.cs.cmu.edu/~ajw/doc/svl.html

Google является прекрасным инструментом

+0

Я думаю, что для чего-то такого же простого, как векторная и матричная математика, было бы полезно, если бы на самом деле научился делать математику. Если он хочет попасть в игры, ему нужно будет знать уравнения и их цель решать проблемы дальше по дорожке. Например, зная, как работают точечный продукт и кросс-продукты для решения S.A.T – Craig

Смежные вопросы