klasa globalna, konstruktor tablicy bool

0

Szczerze mówiąc nawet nie wiem gdzie leży mój problem, moje doświadczenie w c++ jest trochę większe niż zerowe więc proszę o pomoc. Mianowicie piszę prostą grę na OpenGL/GLUT i mam problem z rozpoznawaniem klawiszy. Funkcje biblioteki GLUT działają, tylko zapewne moja klasa do obsługi przycisków jest zła.

plik KeyBuffering.h

class KeyboardState
{
private:
    bool Keys[256];
    bool SpecialKeys[256];
public:
    KeyboardState(); //tutaj nie do konca wiem jak zrobić ten konstruktor
    void OnKeyDown(KeyboardState& k, unsigned char Key);
    void Update(KeyboardState& k);
...

Keybuffering.cpp

 
#include "KeyBuffering.h"
#include <stdlib.h>

void KeyboardState::OnKeyDown(KeyboardState& k, unsigned char Key)
{
    k.Keys[Key] = true;
};
void KeyboardState::Update(KeyboardState& k)
{
    if (k.Keys[27])
        exit(0);
}

...

i main.cpp

 
#include "KeyBuffering.h"
#include <stdlib.h>
#include <iostream>

using namespace std;
KeyboardState keyboardState;  //obiekt globalny ? tylko tak mi chce działac

void Draw() //nie ma znaczenia tutaj

void Tick()
{
    keyboardState.Update(keyboardState);
    Draw();
}

void OnKeyDown(unsigned char Key, int X, int Y)
{
    keyboardState.OnKeyDown(keyboardState, Key);
    MessageBox(NULL, "przycisk nacisniety", "test", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL); //tutaj tylko testowalem czy glut dziala
}
void Initialize()
{
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(800, 600);
    glutInitWindowPosition(10, 10);
    glutCreateWindow("Hello World!");
    glutDisplayFunc(Tick);
    glutKeyboardFunc(OnKeyDown);
    //glutKeyboardUpFunc(OnKeyUp);
    //glutSpecialFunc(OnSpecialKeyDown);
    //glutSpecialUpFunc(OnSpecialKeyUp);
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    Initialize();
    glutMainLoop();
    return 0;
}

Problem polega na tym, że w funkcji update, po nacisnieciu przycisku 27(esc) program powinien sie zakonczyc, a tak nie jest, wiec jestem prawie pewien ze moja klasa nie spełnia swojego zadania, tylko nie wiem gdzie lezy problem.

1
class KeyboardState
  {
   private:
   bool Keys[256];
   bool SpecialKeys[256];
   KeyboardState(); // jest prywatny, tylko metoda może go stworzyć
   public:
   void OnKeyDown(unsigned char Key);
   void Update();
   static KeyboardState &Ref();
  };

KeyboardState::KeyboardState()
  {
   for(size_t i=0;i<sizeof(Keys);++i) Keys[i]=false;
   for(size_t i=0;i<sizeof(SpecialKeys);++i) SpecialKeys[i]=false;
  }
void KeyboardState::OnKeyDown(unsigned char Key)
  {
   Keys[Key] = true;
  }
void KeyboardState::Update()
  {
   if(Keys[27]) exit(0);
  }
KeyboardState &KeyboardState::Ref()
  {
   static KeyboardState ref;
   return ref;
  }

void Tick()
  {
   KeyboardState::Ref().Update();
   Draw();
  }
 
void OnKeyDown(unsigned char Key, int X, int Y)
  {
   KeyboardState::Ref().OnKeyDown(Key);
   MessageBox(NULL, "przycisk nacisniety", "test", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL); //tutaj tylko testowalem czy glut dziala
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1