#c #opengl #character #move #key
#c #opengl #символ #переместить #Клавиша
Вопрос:
Хорошо, моя проблема в том, что я работаю над 2d-игрой (например, mario bros.) .. и я застрял на перемещении персонажа, я реализовал ключи.. и получил простой quad для тестирования перемещения.. но на самом деле это работает не так, как я хочу.
когда я нажимаю «a», мой квадрокоптер перемещается влево, когда я нажимаю «w», мой квадрокоптер перемещается вверх .. просто, но это работает, но если я нажимаю «d», мой квадрокоптер просто не перемещается вправо .. он просто каким-то образом исчезает, хотя я сделал это так же, как и левую клавишу .. и удаление левой клавиши, чтобы посмотреть, влияет ли это на движение x, не помогло
заранее спасибо.. надеюсь, у вас, ребята, есть идея.. я в замешательстве
— как я уже сказал .. другие клавиши работают .. но нажатие d не перемещает квадрокоптер — xpos — это GLfloat, я также пробовал float .. без изменений — нажатие d по какой-то причине приводит к исчезновению моего квадрокоптера
if (active){
if (keys[VK_ESCAPE])
{
done=TRUE;
}
if (keys['W'])
{
if(!toggle)
{
ypos=ypos 1.0;
toggle=1;
}
}
if (!keys['W'])
{
ypos=0.0;toggle=0;
}
if (keys['A'])
{
t_key=1;
xpos1=xpos1-0.1f;
}
if (keys['D'])
{
t_key=0;
xpos2=xpos2-0.1f;
}
else
{
DrawWorld();
DrawChar();
SwapBuffers(hDC);
}
}
int DrawChar(GLvoid){
glLoadIdentity(); // Reset The Current Modelview Matrix
GLfloat xtrans;
if(t_key){
xtrans=xpos1;
xpos2=xpos1;
}
else{
xtrans=xpos2;
xpos1=xpos2;
}
GLfloat ytrans=ypos;
glTranslatef(0.0f,0.0f,-30.0f); // move 5 units into the screen
glTranslatef(xtrans,ytrans,0.0f);
...
ЗАКЛЮЧЕНИЕ
если есть кто-то еще, у кого такие же проблемы … и он прочитал только несколько статей нехе вместо того, чтобы делать все уроки.. (он использовал if только для escape, что работает) вот что вы, вероятно, поняли неправильно.. поместите функции рисования и swapbuffers за пределы else и удалите их .. иначе это не сработает
и спасибо за решение с быстрым ответом:
if (active){
if (keys[VK_ESCAPE])
{
done=TRUE;
}
if (keys['W'])
{
if(!toggle)
{
ypos=ypos 1.0;
toggle=1;
}
}
if (!keys['W'])
{
ypos=0.0;toggle=0;
}
if (keys['A'])
{
t_key=1;
xpos1=xpos1-0.1f;
}
if (keys['D'])
{
t_key=0;
xpos2=xpos2-0.1f;
}
DrawWorld();
DrawChar();
SwapBuffers(hDC);
Ответ №1:
Почему у вас есть такой код:
if (condition1)
{
instruction1
}
if (condition2)
{
instruction2
}
else
{
instruction3
}
Обратите внимание, что instruction3
будет выполнено, только если condition2
вычисляется как false
. В вашем случае condition2
есть keys['D']
. Другими словами, если вы нажмете D
, карта не будет обновлена. Может ли это быть проблемой?
Комментарии:
1. боже … теперь я чувствую себя по-настоящему смущенной ^^ Я просто удалил else, и это работает.. большое вам спасибо.. это всегда одно и то же … я думаю, что слишком сложно