Vai al contenuto
Riverwind

Grafica 2d Con Delphi

Recommended Posts

Salve a tutti...

Ultimamente mi stò esercitando a fare giochini con delphi (+ che altro per la scuola)...Gioco.rar Qui vi mostro l'ultimo....Potete notare che il "gioco" ,che è una specie di battaglia navale va molto lento....ho provato a fare un giochino di aerei vecchio modello ottenendo risultati ancora peggio. Volevo sapere se esiste un modo per programmare giochi 2D con delphi oppure devo provare altro? (molti mi hanno consigliato C#)....(nel programma sopra la form viene ridisegnata completamente ogni 20 millesimi di secondo)

PS: Ho iniziato la programmazione quest'anno quindi non sò fare molto, usate possibilmente un liguaggio che possa capire...U_U...

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Intanto ti segnalo due bug.

Una volta finita la fase 1 si possono ancora spostare le navi.

Inoltre le navi si possono sovrapporre. Io le ho messe tutte in un quadrato. :D

Comunque, se non ridisegnassi quel quadratino che va avanti e indietro potresti anche non disegnare la scena ogni 20 ms ma disegnarla solo quando il mouse cambia posizione o quando appare un evento.

Se sai già usare Delphi puoi continuare ad usare quello tanto in ambienti a finestre gestite (Windows o X) difficilmente troverai qualcosa che ti da l'accesso diretto alla memoria video.

Dovresti usare directDraw di directX (quindi C++). Soltanto che sono degli oggetti COM e sono un po' rognosi all'inizio.

Altrimenti ti devi affidare ad un engine 2D che gestisce le directDraw per te, purtroppo non ne conosco. Usavo DJGPP + Allegro tanto tempo fa ma è per DOS.

Ma chi è che ti ha consigliato il C#, e soprattutto perché?


Modificato da ilmale

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Intanto ti segnalo due bug.

Una volta finita la fase 1 si possono ancora spostare le navi.

Inoltre le navi si possono sovrapporre. Io le ho messe tutte in un quadrato. :D

Comunque, se non ridisegnassi quel quadratino che va avanti e indietro potresti anche non disegnare la scena ogni 20 ms ma disegnarla solo quando il mouse cambia posizione o quando appare un evento.

Se sai già usare Delphi puoi continuare ad usare quello tanto in ambienti a finestre gestite (Windows o X) difficilmente troverai qualcosa che ti da l'accesso diretto alla memoria video.

Dovresti usare directDraw di directX (quindi C++). Soltanto che sono degli oggetti COM e sono un po' rognosi all'inizio.

Altrimenti ti devi affidare ad un engine 2D che gestisce le directDraw per te, purtroppo non ne conosco. Usavo DJGPP + Allegro tanto tempo fa ma è per DOS.

Ma chi è che ti ha consigliato il C#, e soprattutto perché?

A disegnarla quando cambia il mouse ci avevo pensato anche io...in questo caso potrebbe anche funzionare ma nel gioco di aerei che voglio fare non funziona perchè devono essere aggiornate le posizioni almeno 30 volte al secondo...

da quello che ho capito credo che sia meglio lasciare delphi (ho cercato anche io su qualche Engine 2d ma nulla)...proverò C++ considerando che ho in casa vari manuali...partire da 0 però è dura....ma credo che sarà utile dato che l'anno prossimo cominceremo a scuola a fare assembler che dovrebbe essere il padre del C....

PS: Il C# me lo a consigliato un amico che studia XNA...ma con il 2D ci vedo poco...cmq grazie...ah....i bug me li ha ftto notare anche la prof ma non è il gioco in se che mi importa ma + che altro come gestire la grafica....

Ehi! Ma Riverwind non era il compagno di Goldmoon nelle saghe della Dragonlance?!?! Ah che bei ricordi.. e grandi Blind!

ciao

Si esatto!...sei il primo che se ne accorto....credo che io e te siamo gli unici che hanno letto quel libro....viva i Blind!!!...

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Allora, intanto perché no C#.

C'è Java.. un giorno Bill Gates lo prova e dice. Ganzo, bada che bei programmi che facciamo. A quel punto entra un tipo e gli dice che Java lo fa la sun e che è un mercato crescente... virtualizzazione... valore globale aggiunto... bla... bla... bla...

A quel punto Bill dice: "Lo voglio, lo voglio, lo voglio!!" vede che comprare sun è dura e si inventa C# e l'architettura .net, che è un linguaggio che gira su macchina virtuale in modalità completamente protetta. Quindi ogni accesso alla memoria, ogni chiamate di funzione deve fare una doppia indirezione e convertire l'indirizzo reale in indirizzo fisico.. e non c'è il processore che lo fa in automatico con i registri di paging*... no viene fatto via software perché è una macchina virtuale software (anche Java ovviamente), il linguaggio è semi interpretato (come Java), quindi ogni istruzione passa dall'interprete.

*La memoria virtuale è comunemente supportata dai moderni sistemi operativi, e l'indirizzamento è svolto in automatico dalla CPU che tiene una tabella delle pagine per ogni processo. Le macchine virtuali devono fare questa procedura "a mano".

Ora con tutto questo lentume di chiamate che devono essere interpretate e gli indirizzi convertiti.. come cavolo ci si fa a fare un applicazione grafica decente???!!!??

In questi casi di solito si usano librerie, che Microsoft ha chiamato XNA (bada caso scritte in C++), che aggirano il problema, quindi la parte scritta in C# andrà lentissima la parte che sta dentro XNA (che dovrebbe fare la maggior parte del lavoro) va veloce.

Il problema si inizia a creare quando vuoi fare un po' di cose sul serio.. uh.. voglio metterci l'intelligenza artificiale, me la devo calcolare... nooo.. non c'è la libreria velocissima che lo fa.. lo devo scrivere in C# e andrà lentissimo. Oh.. voglio metterci una simulazione fisica, chissà perché tutte le librerie fisiche sono scritte in C++, beh userò la conversione di physX, cavoli ma non gira su Xbox 360, l'Xbox gestisce solo il codice .net puro.... potrei andare all'infinito. Odio XNA.

Per il resto, le Api di Window non sono efficaci per scrivere velocemente su schermo, sono chiamate a funzioni di windows che chiamano altre funzioni che fanno controlli che chiamano altre funzioni che alla fine disegnano su schermo. È giusto che facciano così perché non sono state progettate per andare veloci, ma per essere il più generali (leggi astratte) possibile.

Per i giochini 2D semplici una soluzione pratica, potrebbe essere Flash, active script è facile da imparare. Comunque se vuoi la velocità pura rimanendo comunque ad alto livello C++ non ha rivali. :P

Googla un po' e di engine 2D per C++ ne trovi a bizzeffe.

Delphy è un buon linguaggio per scrivere programmi gestionali / accedere a database, per la grafica Pascal (e derivati) non mi ha mai convinto.

edit:

assembler che dovrebbe essere il padre del C....

Dimenticavo... no! Ma questa è un'altra storia.


Modificato da ilmale

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Allora, intanto perché no C#.

C'è Java.. un giorno Bill Gates lo prova e dice. Ganzo, bada che bei programmi che facciamo. A quel punto entra un tipo e gli dice che Java lo fa la sun e che è un mercato crescente... virtualizzazione... valore globale aggiunto... bla... bla... bla...

A quel punto Bill dice: "Lo voglio, lo voglio, lo voglio!!" vede che comprare sun è dura e si inventa C# e l'architettura .net, che è un linguaggio che gira su macchina virtuale in modalità completamente protetta. Quindi ogni accesso alla memoria, ogni chiamate di funzione deve fare una doppia indirezione e convertire l'indirizzo reale in indirizzo fisico.. e non c'è il processore che lo fa in automatico con i registri di paging*... no viene fatto via software perché è una macchina virtuale software (anche Java ovviamente), il linguaggio è semi interpretato (come Java), quindi ogni istruzione passa dall'interprete.

bellissima descrizione :Clap03: :Clap03: :Clap03:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Allora, intanto perché no C#.

C'è Java.. un giorno Bill Gates lo prova e dice. Ganzo, bada che bei programmi che facciamo. A quel punto entra un tipo e gli dice che Java lo fa la sun e che è un mercato crescente... virtualizzazione... valore globale aggiunto... bla... bla... bla...

A quel punto Bill dice: "Lo voglio, lo voglio, lo voglio!!" vede che comprare sun è dura e si inventa C# e l'architettura .net, che è un linguaggio che gira su macchina virtuale in modalità completamente protetta. Quindi ogni accesso alla memoria, ogni chiamate di funzione deve fare una doppia indirezione e convertire l'indirizzo reale in indirizzo fisico.. e non c'è il processore che lo fa in automatico con i registri di paging*... no viene fatto via software perché è una macchina virtuale software (anche Java ovviamente), il linguaggio è semi interpretato (come Java), quindi ogni istruzione passa dall'interprete.

*La memoria virtuale è comunemente supportata dai moderni sistemi operativi, e l'indirizzamento è svolto in automatico dalla CPU che tiene una tabella delle pagine per ogni processo. Le macchine virtuali devono fare questa procedura "a mano".

Ora con tutto questo lentume di chiamate che devono essere interpretate e gli indirizzi convertiti.. come cavolo ci si fa a fare un applicazione grafica decente???!!!??

In questi casi di solito si usano librerie, che Microsoft ha chiamato XNA (bada caso scritte in C++), che aggirano il problema, quindi la parte scritta in C# andrà lentissima la parte che sta dentro XNA (che dovrebbe fare la maggior parte del lavoro) va veloce.

Il problema si inizia a creare quando vuoi fare un po' di cose sul serio.. uh.. voglio metterci l'intelligenza artificiale, me la devo calcolare... nooo.. non c'è la libreria velocissima che lo fa.. lo devo scrivere in C# e andrà lentissimo. Oh.. voglio metterci una simulazione fisica, chissà perché tutte le librerie fisiche sono scritte in C++, beh userò la conversione di physX, cavoli ma non gira su Xbox 360, l'Xbox gestisce solo il codice .net puro.... potrei andare all'infinito. Odio XNA.

Per il resto, le Api di Window non sono efficaci per scrivere velocemente su schermo, sono chiamate a funzioni di windows che chiamano altre funzioni che fanno controlli che chiamano altre funzioni che alla fine disegnano su schermo. È giusto che facciano così perché non sono state progettate per andare veloci, ma per essere il più generali (leggi astratte) possibile.

Per i giochini 2D semplici una soluzione pratica, potrebbe essere Flash, active script è facile da imparare. Comunque se vuoi la velocità pura rimanendo comunque ad alto livello C++ non ha rivali. :P

Googla un po' e di engine 2D per C++ ne trovi a bizzeffe.

Delphy è un buon linguaggio per scrivere programmi gestionali / accedere a database, per la grafica Pascal (e derivati) non mi ha mai convinto.

edit:

Dimenticavo... no! Ma questa è un'altra storia.

Ottima spiegazione...Ho cercato varie informazioni su internet e parlato con i miei professori e alla fine ho deciso che il C++ è la scelta migliore per programmare (almeno le cose che voglio io).

Non voglio fare giochini 2D con flash...Il due 2D e i giochi spastici sono solo un inizio per qualcosa di piu' grande (spero)....

Da quello che dici sarebbe in'utile imparare C# se poi i risultati sono lenti....Vedo cosa riesco a fare in C++....

Grazie ancora per l'ottima spiegazione....

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×