Bagaimana saya bisa mengambil posisi objek game ke grid?

9

Saya membuat game yang melibatkan elemen gameplay "blok jatuh". Masalahnya adalah, saya tidak begitu yakin bagaimana cara membuatnya sehingga blok-blok akan masuk ke beberapa jenis kisi, dengan kata lain, saya tidak yakin bagaimana ia akan mengambil sel terdekat ke posisinya.

Blok tidak secara terus menerus gertakan ke kisi (yaitu mereka tunduk pada gravitasi). Ada tips?

JesseTG
sumber

Jawaban:

13

Anda dapat melakukan sesuatu seperti ini

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;

Ini pada dasarnya membulatkan posisi X dan Y ke kelipatan terdekat dari dimensi kubus. Kemudian skala dengan dimensi kubus untuk mendapatkan posisi yang seragam.

Austin Brunkhorst
sumber
2
Saya pikir Math.round lebih masuk akal. misalkan bayangkan cubeWidth / height = 3. lalu ax = 4 harus dipetakan ke 3 tetapi x = 5 harus dipetakan ke 6.
numan
0

Dalam penelitian singkat saya, ketika Anda memotret beberapa geometri ke kisi:

  • Selama semua simpul poligon Anda (pada posisi terakhirnya) bertepatan dengan simpul kisi (dengan kata lain, jika apa yang Anda coba pasang pas di kisi), maka

  • Anda dapat mengambil salah satu simpul dari poligon Anda ke simpul grid terdekat, dan menerapkan terjemahan yang sama ke yang lainnya. Anda akan selalu berakhir dengan posisi hasil yang sama.

Ini berarti Anda cukup memilih titik dan memutarnya koordinatnya, atau, jika Anda menggunakan kisi dengan sisi lebih besar dari satu unit, gunakan ekspresi Austin:

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

Marcos Pereira
sumber
-4

Math.ceil memberikan nuansa yang tepat untuk memasang blok ke kisi kanan

pengguna2767178
sumber
5
Bisakah Anda menjelaskan apa yang Anda maksud dengan "perasaan yang benar"? Dan mengapa fungsi langit-langit melakukan itu?
MichaelHouse