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?

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.


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;


-4

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


5
Bisakah Anda menjelaskan apa yang Anda maksud dengan "perasaan yang benar"? Dan mengapa fungsi langit-langit melakukan itu?
MichaelHouse
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.