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

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 26 januari Universiteit Leiden.
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Inleiding programmeren in C++ Life Science & Technology 23 februari Universiteit Leiden.
Arduino project.
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
Klassen en objecten.
Hoofdstuk 5: Bestanden.
Hoofdstuk 2 Hallo, C# !.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Open Dag Informatica (28 nov 2003) 3D Graphics Workshop Dr. Erwin M. Bakker Ing. Ernst Lindoorn Leiden Institute of Advanced Computer Science Leiden University.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Tircms02-p les 7 systemcalls linux vervolg. Inleiding Onder /usr/include/linux staan bestanden die de linuxkernel o.a. gebruikt om drivers aan te spreken.
Hoorcollege 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
Hoorcollege 4 Objecten en methoden. Eigen methode toevoegen class Painter : Game { public void HandleInput() { … } protected override void Update(GameTime.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Hoorcollege 3 Game assets, Invoer verwerken. Tutorlunch GroepTutorStutorZaal UPaul BergervoetBob BestBBG 001 VMarries van de HoefSander VerkuilBBG 731.
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Java C++ nVeilig nMachine- onafhankelijk nVeel libraries, ook voor Internet-I/O Snel Native executables Libraries optimaal voor specifiek OS.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
De laatste essentiele dingen.  Classes ◦ Syntax ◦ Constructors & Destructors  Header & Source Files ◦ Waar gebruiken we dit voor  Compiler Theorie.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
C++ Les 1: introductie. Programmeren Programma’s scripts Websites libraries (Sound, GUI, netwerking…)
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
GUI Graphical User Interface. Wat is een Graphical User Interface Mooi Gebruiksvriendelijk Veel denkwerk.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
GUI & classes Een Gui in een class steken en het object gebruiken.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
18 Februari 2013 Where friends have access to your privates!
Pointers, arrays & dynamische geheugen
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Game Assets
Gameprogrammeren: Overerving
Gameprogrammeren: Animatie
Gameprogrammeren: Methoden
Arjan Egges & Paul Bergervoet
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Player input in Painter
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Programmastructuur
Basis Gameprogrammeren
Tinpro015b-les5 Invoer en Uitvoer.
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Tinpro015b-les6 Templates.
Gameprogrammeren: Game Basics
Game Assets, Invoer Verwerken
Tinpro015b-les4 Klassen.
Voorbeeld: Simulatie van bewegende deeltjes
Libraries, Platform Games
Gameprogrammeren: Tiles en File I/O in Tick Tick
Game: omgaan met tijd (Jewel-Jam)
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Implementatie Zoekboom
Object Communication (Jewel Jam)
FSC_LES_201904A_WindowsVaardigheden
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Graphics, input & more!

 Graphics  Input  Sound  … game loop?

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

 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

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

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

 Alvast gecompileerd

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

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

 Aangeven welke.lib files je wil gebruiken

 freeglut.lib nodig

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

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

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

#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; }

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

 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(); }

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(); }

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; }

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; }

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

 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, };

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;

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; }

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

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

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