Oppure

Loading
22/02/12 12:30
crybot
salve, apro questo topic per chiedervi qualche consiglio riguardo un piccolo gioco in 2D che sto creando. Il gioco in questione e` un remake del celeberrimo impossible game per ios/android/windows phone ecc.ecc.
questo e` un video del gioco: youtube.com/…

come da titolo, vorrei chiedervi, visto che le mie ricerche continue sul caro amico google non hanno dato frutti, come creare e successivamente stampare a schermo una mappa per un gioco del genere. Ho visto che molti per i giochi in 2D adottano un paradigma tile-based, ovvero un file di testo con delle lettere che indicano gli oggetti che andranno a creare la mappa. Io pero`, come si puo` vedere nel video, ho bisogno di coordinate precise per tutti gli oggetti che andranno ad ostacolare il giocatore, quindi avevo pensato ad un file xml da caricare ad ogni lancio del gioco, con gli attributi X e Y di tutti gli oggetti della mappa. e` un metodo sbagliato secondo voi?

mentre ci pensate, vi lascio un altro quesito:

nel video che ho linkato, si vede chiaramente come il cubo "esploda" andando contro i triangolini, mentre salti sopra i quadrati. e` pero` ovvio che il cubo debba esplodere anche quando va contro i quadrati, senza saltarci sopra... come posso implementare una collisione del genere? come faccio a capire se il giocatore a saltato sopra il quadrato o ci e` andato contro? pensavo di cambiare leggermente colore ai bordi e di implementare una per-pixel collision detection, cosi` da poter essere sicuro di come il giocatore viene a contatto con questi ostacoli. questo pero` rallenterebbe il gioco... quindi anche qui la mia domanda e`, avete qualche consiglio?

grazie ;)
aaa
22/02/12 15:30
Snogar
Per il primo quesito, non penso sia sbagliato, tanto un file devi caricare e il tipo di file non è che influisce molto.

Sul secondo quesito credo basti confrontare l'altezza del "personaggio" con quella della piattaforma e nel caso sia uguale o inferiore esegui l'esplosione.
aaa
22/02/12 18:27
Thejuster
Posso aiutarti in questo modo.

Ti consiglio prima di tutto di crearti una struttura e una magari una lista.
oppure semplicemente un array di byte che forma la mappa.
in questo modo


//Texture 0 e cubo1.png
//Texture 1 e cubo2.png

Texture[] Tex;

struct DataObject {

public int ID;
public int x;
public int y;
public bool coll;
}

List<DataObject> MapData = new List<DataObject>();





Il file di mappa lo puoi strutturare in questo modo
esempio se teniamo conto che ogni oggetto misura 32x32 pixel


### File Mappa ####
tex:0,x:40,y:100,true;
tex:0,x:70,y:100,true;
tex:1,x:100,y:100,false;
tex:1,x:200,y:100,true;

#####


Composizione mappa


DataObject d = new DataObject;
StreamReader sr = new StreamReader(Mappa)
string riga;

while((riga = sr.ReadLine()) != null) {

string[] t = riga.split(',');


string[] t2 = t[0].Split(':');
d.ID = int.Parse(t2[1]);

t2 = t[1].Split(':');
d.x = int.Parse(t2[1]);

t2 = t[2].Split(':');
d.y = int.Parse(t2[1]);

t2 = t[3].Split(':');
d.coll = bool.Parse(t2[1]);

}





Per fare un detect di collisione usa
(in questo caso come ti avevo detto esempio Larghezza e altezza = 32)

MapData[i].coll == true && MapData[i].X => PosizionePlayer && MapData[i].X < PosizionePlayer + 32

collisione ok



per creare una sorta di scrolling ti basta piazziare una sola variabile tipo int cioè steps

spritebatch.draw(Texture,MapData[i].X - steps,Mapdata[i].Y,Color.White);

nel caso del video interessa solo l'asse X

Mentre la posizione del player resta inviariata, perchè sono gli oggetti a spostarsi e non il player.

Spero di averti spiegato nei migliori dei modi cosa intendo.


Ultima modifica effettuata da Thejuster 22/02/12 18:29
mire.forumfree.it/ - Mire Engine
C# UI Designer