cdimauro
30-03-2006, 16:40
La prima versione del porting di Diamonds per le SDL è finitoe ed è disponibile nel repository in branches/SDL.
PER USARLO
1) vi consiglio di effettuare un checkout completo del progetto;
2) le librerie SDL (non SDLJava) che stanno in libs/win32 devono essere raggiungibili dal path di sistema;
3) la libreria jpeg.dll dev'essere la prima a esser raggiunta dal path di sistema; purtroppo è diversa da quella che si trova nek JDK o nella JRE (io ho dovuto cambiare il nome a quelle presenti in jdk/bin e jre/bin).
TODO
1) La pulsazione: non sono riuscito a trovare la libreria sdlgfx.dll, che implementa delle API per la rotazione, lo zoom, ecc., per cui tutte le texture (in SDL si chiamano "Surface" :)) vengono disegnate sempre allo stesso modo; si potrebbe al limite realizzare un'artiginale routine di zoom.
2) Per Linux e MacOS X c'è da aggiungere le rispettive librerie (.so e .dynlibs, mi pare) e testare se tutto funziona.
3) C'è da implementare gli alertbox che in LWJGL sono implementate in org.lwjgl.Sys (mi pare).
NOTE SUL CODICE
Ho cercato di togliere di mezzo tutti i riferimenti al carattere "/" come separatore per i nomi di file, sostituendolo con l'apposita API che Java mette a disposizione.
Ho eliminato qualche test di Sound, in quanto divenuto inutile.
Ho modificato DisplayInterface ed EngineInterface, spostando drawQuad in esse, e cambiandole nome in drawTexture (che è più comprensibile).
A Texture ho dovuto aggiungere il metodo pubblico getSurface(), che restituisce una SDLSurface, necessaria per effettuare il blitting di quest'immagine sullo schermo (SDL funziona in modo diverso da LWJGL/OpenGL, per cui era necessario).
GameLoop adesso estende KeyboardListener e mantiene un suo mapping per la tastiera (è stato aggiunto anche a KeyMapping un create appositamente per GameLoop). Questo si è reso necessario per poter intercettare la pressione del tasto Escape e del "tasto" Quit (la chiusura della finestra) in quanto non era possibile uscire da Diamonds (dipendeva soltanto dalla chiusura della finestra, che in SDL è un evento come un altro ed è gestito quindi come tastiera, mouse, joystick, eventi di sistema, ecc.).
Ho dovuto modificare molti test per aggiungere la creazione di un oggetto Audio, in quanto senza engine audio attivato non era possibile caricare i suoni (questo, comunque, era dovuto al fatto che non veniva usato Sound.createForTesting(), come ho scritto nell'altro test).
Ho dovuto modificare la creazione e la finalizzazione degli oggetti (in BootStrap). Adesso l'ordine è engine, audio, tastiera per la creazione e l'opposto per la finalizzazione. Questo perché engine crea e inizializza il subsystem "principale".
Purtroppo mi rendo conto che alcune parti del codice andrebbero risistemate, e soprattutto aggiunti dei test, ma il mio obiettivo era quello di cercare di far funzionare Diamonds con le SDL, cercando di modificare quanto meno possibile il codice esistente, specialmente a livello di "interfaccia".
Scusatemi per questo, e se mi sono sfuggite altre cose che dovevo dire, ma ho effettuato troppe modifiche per ricordarmi di tutti i cambiamenti.
Se qualcuno può effettuare qualche test e riportarmi le sue impressioni, mi farebbe cosa assai gradita. :)
PER USARLO
1) vi consiglio di effettuare un checkout completo del progetto;
2) le librerie SDL (non SDLJava) che stanno in libs/win32 devono essere raggiungibili dal path di sistema;
3) la libreria jpeg.dll dev'essere la prima a esser raggiunta dal path di sistema; purtroppo è diversa da quella che si trova nek JDK o nella JRE (io ho dovuto cambiare il nome a quelle presenti in jdk/bin e jre/bin).
TODO
1) La pulsazione: non sono riuscito a trovare la libreria sdlgfx.dll, che implementa delle API per la rotazione, lo zoom, ecc., per cui tutte le texture (in SDL si chiamano "Surface" :)) vengono disegnate sempre allo stesso modo; si potrebbe al limite realizzare un'artiginale routine di zoom.
2) Per Linux e MacOS X c'è da aggiungere le rispettive librerie (.so e .dynlibs, mi pare) e testare se tutto funziona.
3) C'è da implementare gli alertbox che in LWJGL sono implementate in org.lwjgl.Sys (mi pare).
NOTE SUL CODICE
Ho cercato di togliere di mezzo tutti i riferimenti al carattere "/" come separatore per i nomi di file, sostituendolo con l'apposita API che Java mette a disposizione.
Ho eliminato qualche test di Sound, in quanto divenuto inutile.
Ho modificato DisplayInterface ed EngineInterface, spostando drawQuad in esse, e cambiandole nome in drawTexture (che è più comprensibile).
A Texture ho dovuto aggiungere il metodo pubblico getSurface(), che restituisce una SDLSurface, necessaria per effettuare il blitting di quest'immagine sullo schermo (SDL funziona in modo diverso da LWJGL/OpenGL, per cui era necessario).
GameLoop adesso estende KeyboardListener e mantiene un suo mapping per la tastiera (è stato aggiunto anche a KeyMapping un create appositamente per GameLoop). Questo si è reso necessario per poter intercettare la pressione del tasto Escape e del "tasto" Quit (la chiusura della finestra) in quanto non era possibile uscire da Diamonds (dipendeva soltanto dalla chiusura della finestra, che in SDL è un evento come un altro ed è gestito quindi come tastiera, mouse, joystick, eventi di sistema, ecc.).
Ho dovuto modificare molti test per aggiungere la creazione di un oggetto Audio, in quanto senza engine audio attivato non era possibile caricare i suoni (questo, comunque, era dovuto al fatto che non veniva usato Sound.createForTesting(), come ho scritto nell'altro test).
Ho dovuto modificare la creazione e la finalizzazione degli oggetti (in BootStrap). Adesso l'ordine è engine, audio, tastiera per la creazione e l'opposto per la finalizzazione. Questo perché engine crea e inizializza il subsystem "principale".
Purtroppo mi rendo conto che alcune parti del codice andrebbero risistemate, e soprattutto aggiunti dei test, ma il mio obiettivo era quello di cercare di far funzionare Diamonds con le SDL, cercando di modificare quanto meno possibile il codice esistente, specialmente a livello di "interfaccia".
Scusatemi per questo, e se mi sono sfuggite altre cose che dovevo dire, ma ho effettuato troppe modifiche per ricordarmi di tutti i cambiamenti.
Se qualcuno può effettuare qualche test e riportarmi le sue impressioni, mi farebbe cosa assai gradita. :)