Come posso agganciare la posizione di un oggetto di gioco su una griglia?


9

Sto realizzando un gioco che prevede elementi di gioco "a blocchi". Il problema è che non sono del tutto sicuro di come farlo in modo che i blocchi si aggancino a una specie di griglia, in altre parole, non sono sicuro di come sceglierà la cella più vicina alla sua posizione.

I blocchi non si bloccano continuamente su una griglia (cioè sono soggetti a gravità). Qualche consiglio?

Risposte:


13

Puoi fare qualcosa del genere

int gridCubeWidth = 16, gridCubeHeight = 16;

cube.Position.X = Math.round(cube.Position.X / gridCubeWidth) * gridCubeWidth;
cube.Position.Y = Math.round(cube.Position.Y / gridCubeHeight) * gridCubeHeight;

Questo sostanzialmente arrotonda le posizioni X e Y al multiplo più vicino delle dimensioni del cubo. Quindi ridimensiona in base alle dimensioni del cubo per ottenere la posizione uniforme.


2
penso che Math.round abbia più senso. es. immagina cuboLarghezza / altezza = 3. quindi ax = 4 dovrebbe essere mappato a 3 ma x = 5 dovrebbe essere
mappato

0

Nella mia rapida ricerca, quando si esegue lo snap di una geometria su una griglia:

  • Finché tutti i vertici del poligono (nella sua posizione finale) coincidono con i vertici della griglia (in altre parole, se ciò che stai cercando di scattare si adatta perfettamente alla griglia), allora

  • Puoi agganciare uno qualsiasi dei vertici del tuo poligono al vertice della griglia più vicino e applicare la stessa traduzione a tutti gli altri. Finirai sempre con la stessa posizione risultante.

Ciò significa che puoi semplicemente scegliere un vertice e arrotondare le sue coordinate o, se stai usando una griglia con il lato più grande di un'unità, usa l'espressione di Austin:

cube.Position.XorYorZ = Math.round(cube.Position.XorYorZ / gridCubeWidth) * gridCubeWidth;


-4

Math.ceil dà la giusta sensazione per agganciare i blocchi alle griglie giuste


5
Puoi spiegare cosa intendi con "la sensazione giusta"? E perché la funzione soffitto lo fa?
MichaelHouse
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.