De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Graphics, input & more!.  Graphics  Input  Sound  … game loop?

Verwante presentaties


Presentatie over: "Graphics, input & more!.  Graphics  Input  Sound  … game loop?"— Transcript van de presentatie:

1 Graphics, input & more!

2  Graphics  Input  Sound  … game loop?

3  Tot nu toe alles in console ◦ Niet ideaal voor games, maar het kan wel!

4  Een venster maken ◦ Geen console, eentje waar je iets in kan tekenen.  Een game loop maken ◦ Net zoals in XNA  User input regelen ◦ Net zoals in XNA  Graphics ◦ In OpenGL – niet zoals in XNA

5  freeglut ◦ Window management ◦ Input ◦ Simple rendering (bijv tekst) ◦ Ter vervanging van GLUT (beetje gedateerd)  GLFW ◦ Window management ◦ Input ◦ Meer future proof

6  includes  libs  dlls  #include een paar bestanden  Link de libraries  Zet de dll file in de juiste map

7  Alvast gecompileerd

8  Freeglut files in D:\lib\freeglut\  Creëer een empty project MyGame  Project -> MyGame Properties…

9  Configuration: All Configurations  Tab: VC++ Directories

10

11  Aangeven welke.lib files je wil gebruiken

12  freeglut.lib nodig

13  We maken main.cpp aan #include int main(int argc, char* argv[]) { }

14  freeglut is C-style, niet object-oriented  Enkele functies ◦ glutInit() ◦ glutInitDisplayMode() ◦ glutInitWindowSize() ◦ glutCreateWindow() ◦ glutFullScreen() ◦ glutMainLoop() ◦ Nog veel meer

15  Wat zijn callbacks?  glutReshapeFunc()  glutDisplayFunc()  glutKeyboardFunc() ◦ glutKeyboardUpFunc()  glutMouseFunc() ◦ glutPassiveMotionFunc()  glutSpecialFunc() ◦ glutSpecialUpFunc()  en veel meer

16 #include void Resize(int width, int height); void Draw(); int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); glutInitWindowSize(800, 600); glutInitWindowPosition(0, 0); glutCreateWindow("My Game"); // Callbacks glutReshapeFunc(Resize); glutDisplayFunc(Draw); glutMainLoop(); return 0; }

17

18  Waar is update? void Draw() { glutPostRedisplay(); } void Update() { } void Draw() { Update(); glutPostRedisplay(); }

19  Hoe vaak wordt draw aangeroepen? void Update(float dt) { } void Draw() { float currTime = glutGet(GLUT_ELAPSED_TIME) / 1000.f; float deltaTime = currTime - g_lastTime; g_lastTime = currTime; Update(deltaTime); glutPostRedisplay(); }

20 void Update(float dt) { } void Draw() { float currTime = glutGet(GLUT_ELAPSED_TIME) / 1000.f; float deltaTime = currTime - g_lastTime; if(deltaTime < 1/60.f) { Sleep(2); glutPostRedisplay(); return; } g_lastTime = currTime; Update(deltaTime); glutPostRedisplay(); }

21 void KeyboardDown(unsigned char key, int x, int y); glutKeyboardFunc(KeyboardDown); void KeyboardDown(unsigned char key, int x, int y) { if(key == 'w') cout<<"W pressed"<<endl; if(key == 's') cout<<"S pressed"<<endl; }

22 void KeyboardSpecialDown(int key, int x, int y); glutSpecialFunc(KeyboardSpecialDown); void KeyboardSpecialDown(int key, int x, int y) { if(key == GLUT_KEY_LEFT) cout<<"Left pressed"<<endl; if(key == GLUT_KEY_RIGHT) cout<<"Right pressed"<<endl; }

23  Games willen liever geen input via callbacks  Liever state opvragen wanneer nodig.  In XNA ◦ Keyboard.GetState() ◦ KeyboardState.IsKeyDown()

24  Keyboard state bijhouden  Enum van keys maken enum Keys { Left = GLUT_KEY_LEFT, Up = GLUT_KEY_UP, Right = GLUT_KEY_RIGHT, Down = GLUT_KEY_DOWN, Space = 32, LeftControl = GLUT_KEY_CTRL_L, Delete = 127, Esc = 27, };

25 class KeyboardState { public: KeyboardState() { memset(keyState, 0, 256); } bool IsKeyDown(unsigned char keyCode) { return keyState[keyCode]; } bool IsKeyDown(Keys key) { return keyState[key]; } bool IsKeyUp(unsigned char keyCode) { return !keyState[keyCode]; } bool IsKeyUp(Keys key) { return !keyState[key]; } static KeyboardState GetState() { return _kbState; } static void HandleKeyDown(unsigned char keyCode) { _kbState.keyState[keyCode] = true; } static void HandleKeyUp(unsigned char keyCode) { _kbState.keyState[keyCode] = false; } private: bool keyState[256]; } _kbState;

26 void KeyboardDown(unsigned char key, int x, int y) { KeyboardState::HandleKeyDown(key); } void KeyboardUp(unsigned char key, int x, int y) { KeyboardState::HandleKeyUp(key); } void Update(float dt) { KeyboardState kb = KeyboardState::GetState(); if(kb.IsKeyDown(Keys::Left)) cout<<"left key pressed"<<endl; }

27  Niet standaad in C++  Wel heel veel libraries ◦ OpenAL ◦ SDL ◦ FMOD ◦ Miles ◦ irrKlang ◦ En veel meer  Verschillende licenses, verschillende prijzen

28  Gratis voor niet-commercieel gebruik  €65 euro voor indie license  Makkelijk in gebruik  Weer eens wat anders

29

30  Link irrklang.lib  Kopieer de.dll #include using namespace irrklang; ISoundEngine* engine = createIrrKlangDevice(); if(engine == 0) return 0; engine->play2D("myfile.ogg"); engine->drop();


Download ppt "Graphics, input & more!.  Graphics  Input  Sound  … game loop?"

Verwante presentaties


Ads door Google