Comment puis-je aligner la position d'un objet de jeu sur une grille?


9

Je fais un jeu qui implique des éléments de gameplay "bloc tombant". Le problème est que je ne sais pas trop comment faire pour que les blocs s'accrochent à une sorte de grille, en d'autres termes, je ne sais pas comment il choisira la cellule la plus proche de sa position.

Les blocs ne s'alignent pas en continu sur une grille (c'est-à-dire qu'ils sont soumis à la gravité). Des conseils?

Réponses:


13

Vous pouvez faire quelque chose comme ça

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;

Cela arrondit essentiellement les positions X et Y au multiple le plus proche des dimensions du cube. Ensuite, le redimensionne selon les dimensions du cube pour obtenir la position uniforme.


2
je pense que Math.round a plus de sens. par exemple, imaginez cubeWidth / height = 3. alors ax = 4 devrait correspondre à 3 mais x = 5 devrait correspondre à 6.
numan

0

Dans ma recherche rapide, lorsque vous accrochez une géométrie sur une grille:

  • Tant que tous les sommets de votre polygone (dans sa position finale) coïncident avec les sommets de la grille (en d'autres termes, si ce que vous essayez d'accrochage s'intègre bien dans la grille), alors

  • Vous pouvez accrocher l'un des sommets de votre polygone à son sommet de grille le plus proche et appliquer la même translation à tous les autres. Vous vous retrouverez toujours avec la même position résultante.

Cela signifie que vous pouvez simplement choisir un sommet et arrondir ses coordonnées, ou, si vous utilisez une grille dont le côté est supérieur à une unité, utilisez l'expression d'Austin:

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


-4

Math.ceil donne la bonne sensation pour accrocher les blocs aux bonnes grilles


5
Pouvez-vous expliquer ce que vous entendez par «la bonne sensation»? Et pourquoi la fonction plafond fait ça?
MichaelHouse
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.