Ragazzi, stò creando un piccolissimo engine per un giochino 2D, ho iniziato a introdurre le funzioni basilari che serviranno per il giochino:
Engine.h:
Engine.ccodice:#ifndef _ENGINE_H #define _ENGINE_H #include <stdio.h> #include <stdlib.h> #define TICKGAME 1000 // FPS ( Frame Per Second ) typedef void (*GAMELOOP)(void); typedef void (*RENDERFRAME)(void); typedef void (*PROCESSINPUT)(void); typedef void (*UPDATE)(void); typedef struct _engine { int TickGame; GAMELOOP GameLoop; RENDERFRAME RenderFrame; PROCESSINPUT ProcessInput; UPDATE Update; } ENGINE; ENGINE* Init(); void GameLoop(); // Main Game Loop void RenderFrame(); // Renderizza un frame void ProcessInput(); // Processa l'input dell'utente void Update(); // Aggiorna tutti i componenti interni dell'Engine #endif
main.ccodice:#include "Engine.h" ENGINE* Init() { ENGINE *engine = malloc(sizeof(ENGINE)); engine->GameLoop = &GameLoop; engine->RenderFrame = &RenderFrame; engine->ProcessInput = &ProcessInput; engine->Update = &Update; return engine; } void GameLoop() { int TickGameBefore, TickGameAfter; // Clock attuale TickGameBefore = clock(); do { // Clock all'inizio del gameloop TickGameAfter = clock(); // Se sono passati TICKGAME( millisecondi ) allora eseguo il tick di gioco if (TickGameAfter - TickGameBefore > TICKGAME) { ProcessInput(); Update(); RenderFrame(); // Clock alla fine di un tick di gioco TickGameBefore = TickGameAfter; } } while (1); // Continuo fino a quando non clicco ESC } void RenderFrame() { printf("RenderFrame Function\n"); } void ProcessInput() { printf("ProcessInput Function\n"); } void Update() { printf("Update Function\n"); }
Ora mi è sorto un dubbio:codice:#include "Console.h" #include "Engine.h" int main() { printf("Benvenuti nel gioco\n"); printf("***********************\n\n"); ENGINE *engine = Init(); engine->GameLoop(); return 0; }
Le funzioni che sono all'interno del GameLoop, cioè "ProcessInput", "Update" e "RenderFrame", a loro volta cosa faranno precisamente? Per intenderci. Ora vorrei fare in modo che quando clicco "ESC", devo uscire dal gameloop e quindi terminare il gioco, questa cosa va gestita all'interno della funzione ProcessInput?
premetto che in "Console.c", ho un metodo LeggiTasto che è il seguente:
Io credo che l'input debba essere qualcosa di globale nel gioco, non credete?codice:int LeggiTasto ( int Wait // Input: attesa massima in millesimi di secondo ) // -1 attesa infinita; 0 non attende { int Prima, Dopo, Tasto = 0; Prima = clock(); // lettura in millesimi di secondo if (Wait<0) Wait = 0x7FFFFFFF; // circa 25 giorni do Dopo = clock(); while (Dopo-Prima<Wait && !_kbhit()); if (_kbhit()) { Tasto = _getch(); if (Tasto == 0 || Tasto == 224) Tasto = _getch() + 256; } return ( Tasto ); }
In definitiva chiedo, come mi consigliate di gestire l'input ?

Rispondi quotando
