2d mappa top-down: normalizzazione o no?


11

Sono un principiante assoluto con la programmazione del gioco, se questa domanda dovesse essere formulata in modo inadeguato, tenere presente che non era la sciatteria al mio fianco, ma la mancanza di esperienza di programmazione del gioco.

Il gioco che sto programmando di codificare utilizzerà una mappa 2D dall'alto verso il basso come "mondo". Il mondo potrebbe essere più grande della finestra (la finestra può ingrandire o ridurre) e i veicoli possono essere posizionati in qualsiasi punto del mondo (= non è una mappa piastrellata, lo spazio è "continuo").

Per chiarire con un esempio: se il mondo è un terreno di 1000x1000 metri, un veicolo potrebbe trovarsi in una posizione (327.31, 720.4) metri.

La mia domanda è: qual è il modo più conveniente per rappresentare il mondo internamente? Potrei pensare a queste possibilità:

  • non fare nulla e usare i misuratori come se stessi lavorando con l'oggetto fisico,
  • normalizzare in pixel definendo le dimensioni del mondo come il numero di pixel per rappresentare 1000 metri al massimo zoom,
  • normalizza a 1 definendo la parola come un quadrato di dimensione 1

... ma sono sicuro che ce ne potrebbero essere altri / alcuni dei miei potrebbero non avere senso. È solo che, essendo il mio primo gioco, non ho una chiara idea dei problemi che mi attendono e vorrei una guida per fare una scelta iniziale ragionevolmente corretta.

Grazie per il tuo tempo.


Ho avuto questo problema. Non pubblicherò come risposta - ci sono già grandi cose lì. Ma se lavori in qualche unità arbitraria, puoi supportare qualsiasi risoluzione semplicemente modificando un singolo valore. È anche molto più facile da gestire in termini di gameplay. Infine, con grandi numeri come le misurazioni in pixel, le sim di fisica possono esplodere.
Il comunista Duck il

Risposte:


10

Sono d'accordo con l'utilizzo di un valore del mondo reale (metri, piedi, ecc.) Come base per la distanza. Il problema con gli altri due suggerimenti è che sono entrambe variabili. Lavorare con una dimensione mondiale di 1farà sì che tutta la tua aritmetica sia in virgola mobile tra -1 e 1, il che potrebbe portare a più errori in virgola mobile. Inoltre, se dovessi mai decidere di creare dimensioni del mondo variabili (mondi "grandi" per giochi più lunghi, ecc.) Introdurrai molti problemi al tuo codice. Allo stesso modo, se si utilizzano i pixel, anche a un livello di zoom massimo / minimo, si incontrano confusione e problemi se si decide di aumentare o diminuire i livelli di zoom.


Questa risposta è eccellente (+1). Mi piace particolarmente come hai spiegato i potenziali problemi con l'utilizzo di "1" per le dimensioni del mondo.
Randolf Richardson,

Se si esegue qualsiasi tipo di simulazione fisica, anche se completamente inventata, l'utilizzo di numeri interi a virgola fissa finirà per causare risultati non validi. Tutto quello che devi fare è modellare un singolo veicolo che si muove a velocità unitaria sulla diagonale e scoprirai che non hai modo di rappresentare correttamente la sua posizione.
edA-qa mort-ora-y

3
Concordato RE: utilizzo dei contatori. Ti aiuterà anche a visualizzare e comprendere mentalmente anche le cose. "Quel veicolo è lungo 5 metri" o "Questi due oggetti sono distanti 500 metri" e non devono fare sempre matematica mentale per avere un'idea di ciò che stai facendo.
Tim Holt,

-1 l'affermazione che l'aritmetica dei numeri interi sia più veloce del virgola mobile non è vera in generale, in realtà sono molto più veloci sulla maggior parte delle piattaforme moderne
Maik Semder,

2
L'uso di valori a virgola fissa per posizioni assolute può essere una buona idea. Ciò porta a precisione costante e fisica identica in tutto il mondo.
CodesInChaos,

7

Delle tre opzioni che hai suggerito, usare i contatori sarà probabilmente il migliore. Man mano che crei altri dati, gestire la lunghezza in metri ti semplifica la vita. Tra le altre ragioni, potresti decidere di modificare le dimensioni del tuo mondo o livelli diversi potrebbero aver bisogno di mappe di dimensioni diverse.

Puoi anche decidere di usare i piedi (o eventualmente i pollici). Parte di questa decisione può dipendere dai pacchetti di middleware utilizzati: alcuni motori fisici preferiscono un tipo di unità o un altro (sebbene sia quasi sempre configurabile). Per la maggior parte, puoi semplicemente scegliere un'unità e seguirla.


5

Normalizzare a '1' non è davvero la strada da percorrere (cosa succede se hai un mondo non quadrato? O diversi mondi con dimensioni diverse ...).

Usando i pixel come ... MAI mescolare il gameplay e le misure grafiche !! Non ti bloccare in modo da non poter cambiare la grafica senza dover cambiare il codice.

Quindi metri (piedi o qualunque misura ti piaccia di più) è la strada da percorrere. Ti sentirai molto meglio codificare il tuo lanciarazzi per spostarsi a 50 km / h rispetto a 0.00076 unità / secondo ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.