Недавно я попал в OpenGL / SDL и поиграл с объектами в 2D / 3D пространстве, и, как я уверен, у большинства новичков в этой области есть несколько вопросов о «лучшем» способе сделать что-то. Я цитирую лучше всего, потому что я предполагаю, что нет лучшего способа, это личное предпочтение.
Итак, у меня есть сущность, простая GL_QUAD, которую я хочу перемещать. У меня есть настройка событий клавиатуры, я могу получить события нажатия / отпускания, не проблема.
У меня есть класс сущности, который является моей псевдо-реализацией GL_QUAD ....
class Entity
{
void SetVelocity(float x, float y);
}
У меня есть этот код обработчика событий ...
if theEvent.Key = UPARROW AND theEvent.State = PRESSED
Entity.SetVelocity(0.0f, -1.0f);
else if theEvent.Key = UPARROW AND theEvent.State = RELEASED
Entity.SetVelocity(0.0f, 0.0f);
Мой вопрос: это лучший способ переместить мою сущность? Это привело меня к мысли, что мы могли бы сделать это немного сложнее, если бы у нас был отдельный метод регулировки скорости X / Y. Как SetVelocity забудет меня скорость X, если я начну двигаться влево? Так что я никогда не смогу путешествовать по диагонали.
Например ...
class Entity
{
void SetXVelocity(float x);
void SetYVelocity(float y);
}
if theEvent.Key = UPARROW AND theEvent.State = PRESSED
Entity.SetYVelocity(-1.0f);
else if theEvent.Key = UPARROW AND theEvent.State = RELEASED
Entity.SetYVelocity(0.0f);
if theEvent.Key = LEFTARROW AND theEvent.State = PRESSED
Entity.SetXVelocity(-1.0f);
else if theEvent.Key = LEFTARROW AND theEvent.State = RELEASED
Entity.SetXVelocity(0.0f);
Таким образом, если у меня есть XVelocity, и я затем нажимаю Вверх, у меня все еще будет моя XVelocity, а также новая YVelocity, таким образом, перемещающаяся по диагонали.
Есть ли лучший способ? Я что-то упускаю здесь очень просто?
Я использую SDL 1.2, OpenGL, C ++. Не уверен, что в SDL / OpenGL есть что-то, что могло бы помочь?
Заранее спасибо за ваши ответы.