Skocz do zawartości

Numery klawiszy


Bedi

Rekomendowane odpowiedzi

Witam. Często poruszane jest to pytanie, jak zrobić żeby np. sprawdzić czy wciśnięty jest TAB lub tylda. Marek.S napisał, że tylda odczytywana jest jako 192 (bodajże :P). Dlaczego? Ja mam taki sam problem, gdyż nie wiem jak Gm odczytuje przecinki, slashe itp. Jest jakaś stronka/tabelka/cokolwiek, gdzie zamieszczone są owe numery?

Odnośnik do komentarza
Udostępnij na innych stronach

słyszałem o tym, właśnie w tym problem że coś nie działa

void klawiatura(unsigned char key, int x, int y) {

switch (key) {

case 27: //Escape key

cleanup();

exit(0);

break;

case ' ':

if (ruch==true)

ruch=false;

else

ruch=true;

break;

case 100:

_ang+=10;

break;

case VK_LEFT:

_ang-=10;

break;

 

 

}

 

}

(opengl)

choć jest to dziwne bo obiekt się nie obraca ale error też nie wyskakuje :huh:

Odnośnik do komentarza
Udostępnij na innych stronach

(opengl)

no ale gdzie ten opengl?

 

i wyjasnij te x,y bo patrze i nie widze co ta funkcja robi, po prostu opisz bo nie widze zadnych powiazan a tak nie pomozemy nie wiedzac co robisz :)

 

swoją drogą, masz niejednorodne kody klawiszy. 100 to numpad 4, a VK_LEFT to 37, albo uzywaj numpada albo strzalek nie rozdzielaj

Odnośnik do komentarza
Udostępnij na innych stronach

no skoro piszesz ze obiekt sie nie obraca, to pokaz jak go rysujesz, i jak odbierasz klawisze (gdzie wywolujesz funkcje klawiatura()), bo wciaz mamy ciemno przed oczami. ewentualnie na pw zapodaj kod to poprawie bledy i wyjasnie

Odnośnik do komentarza
Udostępnij na innych stronach

znaczy obraca się ale po naciśnięciu d (100) a nie VK_LEFT. a co do drugiego nie jest to robione w stylu twórz okienko, podepnij opengl-a pod okienko tylko:

void klawiatura(unsigned char key, int x, int y)

{

//tutaj odbiór klawiszy itp

}

void inicjujRendering()

{

//tutaj opcje typu

glEnable(GL_DEPTH_TEST);

// po prostu inicjowanie ustawień

}

void zmianawielkosciokna(int w, int h)

{

//tutaj ustawienia co ma robić kiedy się zmieni wielkosc okna

//głównie po to żeby obraz był zawsze takiej samej wielkości

}

void rysuj()

{

// to co ma rysowac

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //styl wyświetlania

glutInitWindowSize(400, 400);// można się domyślić

 

glutCreateWindow("LoL"); //tutaj całe automatyczne tworzenie okna podpinanie itp

initRendering();// tu też

 

glutDisplayFunc(rysuj); //jaka funkcja ma odpowiadać za rendering

glutKeyboardFunc(klawiatura);// ... za odbieranie klawiczy

glutReshapeFunc(zmianawielkosciokna);//... co ma robić przy zmainie okna

 

glutMainLoop();

return 0;

}

ten sposób jest nieco łatwiejszy i przejrzystszy niż z windows.h

aha wracojąc do tematu nie ma żadnych błędów po prostu nie czyta VK_LEFT ,VK_UP itd ;)

Odnośnik do komentarza
Udostępnij na innych stronach

bo klawisz 100 to nie jest D, tylko numpad 4

swoja droga sprawdze czy Twoje funkcje maja odpowiednie parametry, a do klawiszy uzywaj GLUTowych definicji.

EDIT: parametry masz dobre, ale kurde, wedle gluta klawisz strzalki w lewo to faktycznie 100 - standardowo tak byc nie powinno O.o

Tak czy siak wpisz tam GLUT_KEY_LEFT itp w kody klawiszy

Odnośnik do komentarza
Udostępnij na innych stronach

chyba kawalisz 'd' i tak powinno być według ascii http://en.wikipedia.org/wiki/ASCII#ASCII_p...able_characters

i wszystko ma dobre parametry bo tego używam i mam już dużo zrobione a ten sposób co robię jest właśnie najbardziej glutowy

EDIT:

GLUT_KEY_LEFT
i właśnie o to chodziło :thumbsup:

EDIT 2: chwila pisze mi error że klawisz 100 już jest użyty a klawisz 100 to d !

Odnośnik do komentarza
Udostępnij na innych stronach

no akurat kody klawiszy != kodom znaków, dla tego znak 'd' to dla klawiatury klawisz numpad 4, zas znak 'D' to juz dla klawiatury takze klawisz D

 

EDIT 2: chwila pisze mi error że klawisz 100 już jest użyty a klawisz 100 to d !

EDIT: no perfidnie cos sknociles. Piszesz w Visualu? jak tak to zapodaj projekcik na PW wraz z bibliotekami ktore uzywasz (GLUT itp) to przekompiluje u siebie i sprawdze dokladnie co nie gra

Odnośnik do komentarza
Udostępnij na innych stronach

a dla sprawdzenia, sprobuj z kodem 0x25 a potem 0x01 (pierwszy powinien zadzialac dla strzalki)

Odnośnik do komentarza
Udostępnij na innych stronach

te numery 0x25 to kod szesnastkowy, równie dobrze mozesz napisac 37 zamiast tego 0x25, daj to zamiast GLUT_KEY_LEFT :)

Odnośnik do komentarza
Udostępnij na innych stronach

nadal nic :crying:

 

 

 

edit masz:

#include <iostream>

#include <stdlib.h>

 

#include <GL/glut.h>

using namespace std;

 

float _ang=100.0f;

 

void klawiatura(unsigned char key, int x, int y) {

switch (key) {

case 27:

exit(0);

break;

case GLUT_KEY_LEFT:

_ang+=10;

break;

 

 

}

 

}

 

 

 

void initRendering() {

glEnable(GL_DEPTH_TEST);

glClearDepth(1.0f);

}

 

void wielkosc(int w, int h) {

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);

 

}

 

void rysuj() {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(0.0f,0.0f,-5.0f);

glRotatef(_ang,1.0f,0.0f,0.0f);

glColor3f(0.0f,0.1f,0.0f);

glBegin(GL_QUADS);

 

glVertex3f(-0.7f, -0.5f, 0.0f);

glVertex3f(0.7f, -0.5f, 0.0f);

glVertex3f(0.4f, 0.5f, 0.0f);

glVertex3f(-0.4f, 0.5f, 0.0f);

 

glEnd();

 

 

 

glutSwapBuffers();

}

void odswierz(int value) {

 

 

glutPostRedisplay();

 

glutTimerFunc(25, odswierz, 0);

}

 

 

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowSize(400, 400);

 

glutCreateWindow("BoB");

initRendering();

 

glutDisplayFunc(rysuj);

glutKeyboardFunc(klawiatura);

glutReshapeFunc(wielkosc);

glutTimerFunc(25, odswierz, 0);

glutMainLoop();

return 0;

}

sorry że tak długo ale miałem atak pseudo-wirusów

EDIT: dobra problem rozwiązany

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...