Progetto Pre-Revolt 2 "Ball's maze"

In questa zona vengono raccolte le discussioni che riguardano lo sviluppo di nuovi progetti per ARM e per Re-Volt

Moderatore: Michelangelo

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » mar 16 nov 2010, 21:59

Il vector3 è una classe presente nelle directx (pensavo che tu lo sapessi già) fatta apposta per indicare un punto nello spazio della scena, infatti contiene già le proprietà X Y Z oltre a varie funzioni per lavorare nei punti dello spazio. Per esempio esiste una funzione (non ricordo se è la Vector3.Dot o la Vector3.Cross) che lavora i valori di X Y Z restituendo la direzione di quest' ultimi rendendo X, Y e Z o 1 o 0.

Perciò preferirei che il loader dei file restituisca i valori in Vector3, anche perchè più compatibile con le directx. Molte funzioni richiedono come parametri valori in Vector3.
Per quanto riguarda il motore fisico non ho ancora guardato il lavoro che hai fatto, ma come detto prima preferirei che ci lavorassimo assieme, credo che stai facendo molto lavoro inutilmente mini, molte cose nel progetto non servono e non credo possano andar bene con le directx... possono sempre servire per altri progetti, perciò non ti dico di non continuarlo... chissà, magari troverà applicazioni in future complesse applicazioni scientifiche... ma non ci vedo una grande applicazione in revolt 2, ne in ball' s maze.

Per quanto riguarda l' utilizzo di CPU penso non ci siano chissà quali problemi, se usa un po' di CPU non è la fine del mondo, quel giochino non deve fare mica chissà che. Comunque penso che cercherò di ottimizzare il codice per utilizzare meno CPU e nel caso estremo per chi avesse un pc molto poco potente metteremo un' opzione per fare le buche disegnate anzichè in 3D.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » mer 17 nov 2010, 17:12

Aggiornato il sorgente con aggiunta la parte per i buchi.
L' eseguibile è un' esempio con due buchi.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » mer 17 nov 2010, 18:52

Bello! E devo dire che anche se i buchi sono quadrati, non è poi tanto male!

Ma non avevi messo la vista dall'alto? (così si rischia di non vedere la palla quando ci saranno i muri)

P.S.: è possibile mettere un effetto antialiasing? Per poter visualizzare i solidi anziché da tanti "pixel", uniformi...

Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » mer 17 nov 2010, 20:46

Linkinf22 ha scritto:Perciò preferirei che il loader dei file restituisca i valori in Vector3, anche perchè più compatibile con le directx. Molte funzioni richiedono come parametri valori in Vector3.
Per quanto riguarda il motore fisico non ho ancora guardato il lavoro che hai fatto, ma come detto prima preferirei che ci lavorassimo assieme, credo che stai facendo molto lavoro inutilmente mini, molte cose nel progetto non servono e non credo possano andar bene con le directx... possono sempre servire per altri progetti, perciò non ti dico di non continuarlo... chissà, magari troverà applicazioni in future complesse applicazioni scientifiche... ma non ci vedo una grande applicazione in revolt 2, ne in ball' s maze.
In teoria in questo momento sto studiando geometria vettoriale nello spazio ( :???: (ma neanche tanto, qualcosa ci sto capendo)) perchè tu mi dicevi del problema delle collisioni che non sapevi come realizzarle.
Volendo si possono anche utilizzare soluzioni come "BoundingSphere" e "BoundingBox" di XNA, ma non è poi molto preciso... inoltre ci vorranno due files: uno per il modello ed uno per le collisioni.

Invece così come sto facendo io (che inizialmente ero partito dal fare molte cose, ora invece mi sto concentrando su ciò che è più importante), le collisioni verranno molto più precise e ci sarà bisogno di un solo file, che poi servirà sia per il modello per le DirectX che per il modello delle collisioni (ovviamente questa cosa dei files sarà necessaria in Re-Volt, ma inutile in ball's maze, poichè il file indica solo posizioni di buche e muri).
Infatti per le collisioni sto cercando di risolvere matematicamente alcuni problemi legati all'intersezione tra segmento (retta) e piano, in modo tale che si possa definire se un segmento interseca o no un piano definito da una faccia del mesh.

Detto così sembra altamente complicato, ma in realtà credo sia molto più semplice (giusto un po' più difficile l'aspetto matematico, ma tanto basta trovare un'equazione e poi il resto lo fa da solo :mrgreen: )

Comunque, appena avrò finito con la retta e il piano, metterò i sorgenti, anche se incompleti.
Se possibile, visto che sto ancora cercando di impostare le cose, non modificare niente (a meno che non sia indispensabile) o, se modifichi qualcosa, scrivi un commento con qualche motivazione per poter capire meglio quando andrò a continuare la programmazione.

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » gio 18 nov 2010, 16:06

Infatti per fare i buchi ho sviluppato una classe ("CollisionSphere.cs") che funziona allo stesso modo delle BoundingSphere di XNA, indicando il centro di una CollisionSphere ed il raggio, si verifica se la CollisionSphere interseca una CollisionSphere con centro il centro della mesh, se si intersecano la mesh viene cancellata.

Per la struttura dei file pensavo più una cosa del genere:
Butto giù un esempio veloce

"LevelName": Il Drago;
"BallPosition": 2, 3, -8;
"HolePositions": (-5, 2, 12)(x, y, z)(x, y, z)(x, y, z)...;
"Walls":(-7, 2, 14, 2, 5)(x, y, z, larg, lung)...;
ecc.

Così restituirebbe una string "LevelName", un vector3 "BallPosition", un array o list di vector3 che indicano le posizioni delle buche, un array o una list di vector3 e due array o list di float che indicano: posizione (in vector3), larghezza e lunghezza (in float).
Ecc.

Certo, sarebbe comunque da migliorare sotto l' aspetto di sintassi e altro, ma della struttura di file che stai facendo tu ci sto capendo ben poco. Comunque l' importante è che funzioni.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » gio 18 nov 2010, 19:52

Linkinf22 ha scritto:"LevelName": Il Drago;
"BallPosition": 2, 3, -8;
"HolePositions": (-5, 2, 12)(x, y, z)(x, y, z)(x, y, z)...;
"Walls":(-7, 2, 14, 2, 5)(x, y, z, larg, lung)...;
ecc.
Quindi pensavi a qualcosa di simile ad un file XML o ad un file INI?
Perché se è così, dovrei rifare tutto da capo...

Io cercavo di fare un file "binario" (come i files .prm, .ase, .fob, ecc. di Re-Volt, oppure anche i normalissimi files di immagine [.bmp, .gif, .jpg], audio, video, ecc.) anzichè un file testuale, poichè i dati binari si caricano più velocemente ed occupano meno spazio.
SpoilerMostra
Esempio: il numero '3,1415926535' sottoforma di testo occupa 12 bytes, mentre come numero float ne occupa solo 4 (dovrebbe essere questo testo (in esadecimale): 332C31343135393236353335 contro questi dati binari (sempre in esadecimale): 40E487ED [sì, li ho fatti a mano :ride: ])
E così mi è venuto in mente questo tipo di file (la cui struttura è scritta in 'Tipo di file di livello.txt').

I primi quattro byte servono per "riconoscere" il tipo di file (molti tipi di file hanno questi byte iniziali): se non corrispondono ad una sequenza specifica (quella che ho scritto nel file), il file automaticamente non sarà valido.

Il quinto byte serve per identificare la versione del tipo di file: se per esempio creeremo una patch in cui esisterà qualcosa in più, il programma riconoscerà automaticamente che quel file è stato creato con una versione precedente e lo carica adeguatamente.

Nel byte denominato "Altri dati" ci andranno alcune informazioni (prevalentemente di tipo bool o a scelta multipla ridotta); per il momento sarà composto solo da due bit utili e sei bit '0'.

Gli altri byte credo siano abbastanza comprensibili :-)

P.S.: Ho completato la funzione per il caricamento dei livelli, controllala e dimmi cosa ne pensi. Se necessario creerò un livello "a mano" (col blocco note) e vedremo cosa succederà.

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » gio 18 nov 2010, 20:45

Mini che versione usi di visual studio? Quando apro il progetto su dropbox mi dice che devo convertirlo nella versione più recente.

Comunque come fai la struttura dei files non mi importa poi tanto, basta che funziona e che sia "performante".

EDIT: Ho guardato la classe "LevelIO", nella parte:

if ((data[49] && 192) == 64) difficulty = Difficulty.Easy;
else if ((data[49] && 192) == 128) difficulty = Difficulty.Medium;
else if ((data[49] && 192) == 192) difficulty = Difficulty.Hard;

dà errore in data[49] && 192: "Impossibile applicare l' operatore '&&' a operandi di tipo 'byte' e 'int'".

Inoltre la funzione "LoadLevel" restituisce un valore bool ed ha come parametri solamente "string Path", stavo pensando:
Facciamogli restituire un valore string con il nome del livello e come parametri ci mettiamo degli out che restituiscono i valori caricati, cioè i vari vector3, gli array di vector3 ecc.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » gio 18 nov 2010, 23:03

No, io invece stavo pensando di lasciare i valori nelle variabili globali della classe (o le rendo pubbliche o creo le proprietà), mentre quello che restituisce la funzione è un valore che indica il successo del caricamento del livello; se però vuoi caricare le variabili singolarmente, possiamo fare così.

Per l'errore, ho appena corretto: il problema era che anziché l'operatore && ci andava l'operatore &.

Comunque io ho C# 2008, non hai anche tu quello?

Avatar utente
TheFactor82
Amministratore
Messaggi: 7987
Iscritto il: gio 4 mag 2006, 21:26
Località: Torino
Contatta:

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da TheFactor82 » ven 19 nov 2010, 9:26

Due cose mi fanno ridere:
Lo Spoiler per il numero 3,1415... In una sezione riservata :lol:
E il fatto che forse non avete la stessa versione del programma di sviluppo!!! :lol: :lol: :lol:
My Gp's:
10 Settembre 2000: Monza - ITA (F1)
24-25 Aprile 2004: Imola - RSM (F1)
07 Ottobre 2007: Monza - ITA (WTCC)
31 Agosto 2008: Misano - ITA (MOTOGP/250/125)
05-07 Settembre 2008: Spa Francorchamps - BEL (F1)
20-22 Luglio 2012: Hockenheimring - GER (F1)
07 Settembre 2014: Monza - ITA (F1)
14 Aprile 2018: Roma - ITA (FE)

My ARM Card

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » ven 19 nov 2010, 15:55

Grazie per la "critica costruttiva" TF, ma forse ce ne stavamo rendendo conto da soli che non abbiamo la stessa versione di visual studio. :ride:

Il fatto è che io avevo la 2008 nel pc vecchio e mi ricordavo che mini ha sia la 2008 che la 2010, quindi quando ho comprato il nuovo pc ho pensato di installare la 2010...
Forse mini ha pensato come me ma in modo inverso, lui si ricordava che io avevo la 2008, perciò ha utilizzato la 2008.

Comunque mini (a meno che mi sbaglio) visto che hai anche la 2010, utilizziamo entrambi la 2010, se sei daccordo.

Per quanto riguarda lo scambio di variabili, preferirei scambiarle tra i metodi con gli out... a meno che questo riduca le prestazioni.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » ven 19 nov 2010, 20:29

Uhm... che casino! :lol2:

Comunque no, io ho SOLO la 2005 (non installata) e la 2008 (che sto usando).
TheFactor82 ha scritto:Due cose mi fanno ridere:
Lo Spoiler per il numero 3,1415... In una sezione riservata :lol:
È che volevo mettere l'ipotetica memorizzazione di PI greco come esempio, ma poi ho pensato che magari non vi andava di leggere tante cose più l'esempio, quindi l'ho messo in uno spoiler... :lol2:

Vabbè, a parte queste cose, per le variabili, per me va bene (anzi, credo che così come hai detto tu occupino meno memoria), però devi avere un livello già inizializzato...
Per esempio tu dovresti fare:
Level Primo = new Level(); // Livello già inizializzato
// Tutti i parametri di output dovranno essere inseriti!
LevelIO.LoadLevel("First.lvl", out Primo.Holes, out Primo.Walls, out Primo.Start, out Primo.End, out Primo.Width, out Primo.Height, out Primo.Name);
Mentre per come è ora, basta che fai:
LevelIO Loader = new LevelIO("First.lvl"); // Carica il livello
Level Primo = new Level(Loader.LevelName, Loader.Holes, Loader.Walls); // Carica alcuni valori
Primo.Start = Loader.Start; // Si può aggiungere anche un valore in base allo spessore del muro di partenza
Comunque ora, finito di fare ciò che sto facendo (mettere a posto la stanza), lo modifico.

P.S.: TF, quello che intendevo con la formattazione testo in C# con il tag

Codice: Seleziona tutto

 era quello che ho fatto ora a mano!
Non è che si potrebbe fare una cosa del genere? (Se non si può, non fa niente, continuerò a formattare a mano :-) )

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » sab 20 nov 2010, 18:52

Mini riusciresti a sostituirmi i parametri out di LoadLevel da array a list?
Decisamente le list sono più facili da gestire.

Inoltre come parametri mi metteresti solo path e List<Vector3> Holes, siccome il resto non mi serve o sono cose che ancora non sono state implementate mi crea un mucchio di confusione...
Ho provato a caricare il livello ma ho dovuto modificare un sacco di codice aggiungendo cose che non servivano solo per poter restituire gli out... Il problema è che non mi funziona e non so dove mettere le mani per cercare di sistemarlo, data la quantità di codice che ho modificato.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
TheFactor82
Amministratore
Messaggi: 7987
Iscritto il: gio 4 mag 2006, 21:26
Località: Torino
Contatta:

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da TheFactor82 » sab 20 nov 2010, 21:05

Mi raccomando ragazzi, anche se non credo di dovervelo dire... Una cosa importantissima non sono tanto i commenti (quelli aiutano, ma va beh...) ma la gestione degli errori: fate in modo di mettere dei messaggi di errore chiari e identificativi per capire dove si pianta un programma, altrimenti a debuggarlo ci mettete 3 anni!
My Gp's:
10 Settembre 2000: Monza - ITA (F1)
24-25 Aprile 2004: Imola - RSM (F1)
07 Ottobre 2007: Monza - ITA (WTCC)
31 Agosto 2008: Misano - ITA (MOTOGP/250/125)
05-07 Settembre 2008: Spa Francorchamps - BEL (F1)
20-22 Luglio 2012: Hockenheimring - GER (F1)
07 Settembre 2014: Monza - ITA (F1)
14 Aprile 2018: Roma - ITA (FE)

My ARM Card

Linkinf22
Messaggi: 1144
Iscritto il: sab 25 ago 2007, 19:07

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da Linkinf22 » sab 20 nov 2010, 21:49

Il problema è che con le directx o si tratta del comune errore di cui il debug riporta l' errore (cosa che avviene con i programmi normali) o si tratta di un' errore riguardo, appunto, le directx: ed in questo caso, se ti va bene il debug ti riporta all' istruzione da cui è crashato il programma scriventoti semplicemente "errore dell' applicazione" e senza darti altre informazioni.
Pultroppo a volte non si ha nemmeno la fortuna che il debug ti riporta all' istruzione che ha causato il crash scrivendoti "errore dell' applicazione", ma nella finestra si vede tutto bianco con i bordi rossi ed una bella X rossa che forma le diagonali della finestra... E qui ti trovi senza avere una misera traccia da cui partire per risolvere il problema.
Mi è capitato più volte, e per fortuna finora sono sempre riuscito a correggere ricontrollando le ultime modifiche effettuate.
Mentre oggi ho modificato un sacco di codice per poter utilizzare la funzione creata da minibond per caricare i livelli dai file... Ma quando ho eseguito mi sono ritrovato con quella non tanto bella X rossa e sinceramente l' idea di ricontrollare tutto quel codice modificato non mi alletta molto... Piuttosto sto pensando di ripartire dall' ultimo backup (risalente a ieri) e provare a riscrivere il codice da li.
Però prima preferirei che minibond facesse le modifiche che gli ho chiesto nel post precedente.
Ai creatori di piste ed auto potrebbe interessare il progetto MIB, c'è il topic nella sezione "Sviluppo" del forum.


Avatar utente
minibond
Messaggi: 1725
Iscritto il: lun 30 lug 2007, 15:00
Località: Roma

Re: Progetto Pre-Revolt 2 "Ball's maze"

Messaggio da minibond » sab 20 nov 2010, 22:10

Il problema è che ora non sono a casa mia, quindi non posso accedere e modificare i files; purtroppo ritornerò domani sera e la prima cosa che farò sarà modificare il codice (che secondo me era meglio come dicevo prima per gestire meglio i valori, e cioè con le variabili all'interno della classe LevelIO).

<offtopic>
La seconda cosa che farò sarà quella di installare e provare un programma (Xenocode) che trasforma le applicazioni da CLR a codice nativo, così possiamo anche evitare di far installare all'utente finale il .NET Framework.
Ora mi metterò a studiare un po' di C++ per le applicazioni Windows e magari chissà che non potremmo usarlo per i nostri progetti...

EDIT: Ho installato xenocode, ma è solo una prova gratuita... ora cercherò su internet qualcosa di simile.
</offtopic>

EDIT:
Forse ho trovato una (anzi, due) soluzioni:
1) Creo una struct in cui ci metto tutte le variabili chiamata "LevelParams"
2) Creo vari metodi, ciascuno dei quali restituisce solo un valore che si appoggiano tutti solo ad un metodo (quello che c'è già) che restituisce tutti i valori.

Secondo me però è meglio la prima. Prima di modificare il file, aspetto una risposta, altrimenti combino qualche casino...

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti