Poszukuje jakiś kod albo instrukcje jak napisać w opengl obsługę 2 lub więcej klawiszy. Znalazłem kilka tematów podobnych lecz w żądnym nie znalazłem szczegółowej instrukcji, jedynie pomysł na stworzenie tablicy wypełnianej wartością false lub true i sprawdzanie jej. Chodzi mi o przemieszczanie obiektu po przekątnych a do tego są potrzebne 2 klawisze. Ma ktoś jakąś rade jak to napisać? Obiekt przy obsłudze oddzielnie tylko 4 strzałek na klawiaturze działa opornie i porusza sie jak powinien tylko po klikaniu a nie przyciskaniu cały czas.
- Rejestracja:ponad 15 lat
- Ostatnio:prawie 9 lat
Przechwytuj osobno komunikaty o wciśnięciu klawisza i o puszczeniu. A w międzyczasie w timerze wykonuj odpowiednie akcje z nimi związane. Robisz sobie 4 boole odpowiadające strzałkom. W timerze który sie wykonuje co 100ms sprawdzasz które boole są na true i wykonujesz odpiowiednie akcje na obiektach (przesuwanie w odpowiednią strone). No i samo wykrywanie przyciśnięcia klawisza. Jeśli program wykryje że strzałka do góry została wciśnieta, ustawiasz sobie boola na true (i timer wtedy bierze go pod uwagę) a gdy otrzymasz komunikat o puszczeniu strzałki do góry, to resetujesz tego boola.

- Rejestracja:ponad 21 lat
- Ostatnio:2 minuty
Poszukuje jakiś kod albo instrukcje jak napisać w opengl obsługę 2 lub więcej klawiszy.
OpenGL jest do grafiki, nie do klawiszy.
To tak samo jakbyś zapytał jak napisać obsługę dwóch klawiszy w DirectSound. Albo w MySQL. Albo w libjpeg.
W czym więc chcesz napisać te klawisze?
Czego używasz do otwarcia okna: GLUT, SDL, WinAPI?

- Rejestracja:ponad 5 lat
- Ostatnio:prawie 5 lat
- Postów:1
Działa rozwiązanie od misiakufal, praktycznie jak joystick - ktory jest jeszcze szybszy od klawiatury.
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include "GL/freeglut.h"
bool LeftArrow= false;
bool RightArrow = false;;
bool UPArrow = false;
bool DownArrow = false;
static float flyinObject_x =0.0;
static float flyinObject_y =-6.7;
static float flyinObject_z =0.0;
int main(int argc, char** argv)
{
///***...
glutKeyboardFunc(key);
glutKeyboardUpFunc( keyup );
glutSpecialFunc(SpecialInput);
glutSpecialUpFunc(SpecialInputReleaseKey);
glutSetKeyRepeat(1);
glutTimerFunc(40,Timer,0);
///***...
}
void SpecialInput(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
//flyinObject_z+=+0.1;
UPArrow = true;
break;
case GLUT_KEY_DOWN:
// flyinObject_z+=-0.1;
DownArrow = true;
break;
case GLUT_KEY_LEFT:
// flyinObject_x+=+0.1;
LeftArrow = true;
break;
case GLUT_KEY_RIGHT:
// flyinObject_x+=-0.1;
RightArrow = true;
break;
}
}
void SpecialInputReleaseKey(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
UPArrow = false;
break;
case GLUT_KEY_DOWN:
DownArrow = false;
break;
case GLUT_KEY_LEFT:
LeftArrow = false;
break;
case GLUT_KEY_RIGHT:
RightArrow = false;
break;
}
}
GLvoid Timer( int value )
{
if (UPArrow==true){flyinObject_z+=+0.07;}
if(DownArrow==true){flyinObject_z+=-0.07;}
if (LeftArrow==true){flyinObject_x+=+0.07;}
if(RightArrow==true){flyinObject_x+=-0.07;};
glutTimerFunc(30, Timer, 0);
}



Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.