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?

JesseTG
la source

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.

Austin Brunkhorst
la source
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;

Marcos Pereira
la source
-4

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

user2767178
la source
5
Pouvez-vous expliquer ce que vous entendez par «la bonne sensation»? Et pourquoi la fonction plafond fait ça?
MichaelHouse