2010-08-11 7 views
5

Qualcuno può far luce su come un programma come quello potrebbe essere strutturato?Come fanno quei giochi di sabbia java a tenere traccia di così tante particelle?

Quali classi Java avrebbero impiegare per tenere traccia di così tante particelle e quindi controllare contro di loro per cose come il rilevamento delle collisioni? Le particelle devono sapere quali particelle sono accanto o che non sono accanto a nulla in modo che possano cadere ecc.

Here's un esempio, nel caso in cui non sei sicuro di cosa sia un gioco di sabbia.

+1

Questa è una distrazione divertente. – AHungerArtist

+1

Hai controllato questa discussione? http://www.scirra.com/forum/viewtopic.php?f=3&t=6909&p=54531 –

+0

Il sito a cui ti colleghi ha un forum di sviluppo. –

risposta

4

Array, principalmente.

  • Una matrice unidimensionale di chicchi in movimento attivo, rappresentati da due coordinate (e possibile una velocità se si desidera l'accelerazione gravitazionale).
  • Una matrice bidimensionale di bool (o colori), che rappresentano le parti fisse del mondo.

Il modello di fisica più semplice è quello di rimuovere un grano una volta che è a riposo (ad esempio quando vengono riempite le posizioni del mondo di seguito, sotto a sinistra e sotto a destra): invece, la coordinata del mondo corrispondente è riempita Ciò mantiene i calcoli gestibili. Lasciare che una grana si sposti verso il basso se la coordinata del mondo di sinistra o destra è libera. Le collisioni tra i grani in movimento possono essere ignorate senza perdere molta verosimiglianza.

(non riesco a superare la quantità di potenza della CPU abbiamo avuto modo di risparmiare in questi giorni!)

+2

Verisimilitude è probabilmente la parola migliore esistente. Grazie per la risposta. – Stretch

+0

@Pontus Io stesso ho fatto un esperimento per creare un gioco con la sabbia nella tela HTML5. Ho guardato questa domanda perché volevo sapere se c'è un modo più efficiente per farlo, perché l'implementazione che ho fatto è più lenta di un inferno. La cosa strana è che javascript è abbastanza potente da poter tracciare più di 1200 oggetti in un ambiente 3D con zero lag, ma 200 oggetti in un'app di sabbia cadente sperimentale lo metteranno in ginocchio. [Qui] (http://codesocialist.com/#/?s=b4) è il mio esperimento. Noterai che ho una matrice per ogni particella e una matrice per particelle "terrestri". –

0

La versione semplice può essere implementato senza troppi problemi in una notte sciolto venerdì (come ho fatto io in questo momento). Basta creare un programma con un array 2D (di byte, interi o qualsiasi cosa) che rappresenta il tuo campo. In ogni tick, iterare tutti gli elementi e fare un controllo:

  • Se il campo sottostante (array [x] [y + 1]) è vuoto, spostare 1 punto in basso (= impostare [x] [y ] per svuotare, [x] [y + 1] per occupato)
  • Altrimenti, se [x-1] [y + 1] è vuoto, andare lì.
  • Altrimenti, se [x + 1] [y + 1] è vuoto, andare lì.

Ecco le basi. Successivamente devi aggiungere assegni come non 'ripetere' il calcolo per un grano (imposta un flag nella nuova posizione che viene controllata alle seguenti iterazioni).

ho seguito this tutorial, è abbastanza buono, non troppo lungo, ma ancora fa notare insidie ​​e le cose comuni del genere.