Saya telah mencari formula untuk plot (world-> screen) dan ubin isometrik pick (world-> screen) di dunia berbentuk berlian. Yang saya coba selalu tampak, well, off. Apa cara yang biasa / benar untuk melakukan ini?
Saya telah mencari formula untuk plot (world-> screen) dan ubin isometrik pick (world-> screen) di dunia berbentuk berlian. Yang saya coba selalu tampak, well, off. Apa cara yang biasa / benar untuk melakukan ini?
Jawaban:
Berdasarkan komentar Anda, inilah kode yang saya gunakan untuk mengonversi nilai ubin x, y ke koordinat layar. Sekarang, itu tidak memperhitungkan "ubin 3d", semuanya dianggap berada di pesawat yang sama, jadi jika Anda menulis game yang penting, kode ini tidak akan berfungsi.
//this converts a map x/y coordinate into screen coordinates
//public, static method, so can be called outside the Tile object
point Tile::convertToScreen(int x, int y, int offsetX, int offsetY)
{
point screen;
//calculate the screen coordinates
//note: these will then be modified by the camera
screen.x = offsetX - (y * TILE_WIDTH/2) + (x * TILE_WIDTH/2) - (TILE_WIDTH/2);
screen.y = offsetY + (y * TILE_DEPTH/2) + (x * TILE_DEPTH/2);
return screen;
}
titik hanyalah sebuah struktur yang mengandung ints x dan y, TILE_WIDTH akan menjadi 64 dalam kasus Anda, TILE_DEPTH adalah jenis nama yang buruk (sebenarnya adalah ketinggian grafik ubin), tetapi akan menjadi 32 dalam kasus Anda. Offsetnya adalah jika Anda ingin peta ubin Anda "mulai" di lokasi x, y yang berbeda (seperti jika Anda ingin ubin berada di atas kumpulan ubin lain). Biasanya offset bisa 0,0.
Ini akan menghasilkan peta dengan 0,0 di atas, tengah, seperti ini:
0,0
0,1 1,0
0,2 1,1 2,1
Adapun mencari ubin x, y dari kursor:
point selectedTile;
int x = mX - camera.x;
int y = mY - camera.y;
selectedTile.x = (y + x/2)/TILE_DEPTH;
selectedTile.y = (y - x/2)/TILE_DEPTH;
Dalam bit kode ini, mX dan mY adalah koordinat layar mouse, yang kami gabungkan dengan nilai-nilai kamera untuk mencari tahu di mana kita berada di "koordinat dunia". Semua yang lain sama dengan contoh kode sebelumnya.
Sekali lagi, ini mengasumsikan peta ubin isometrik 2d datar. Ada beberapa pekerjaan tambahan jika Anda ingin menggunakan tampilan peta semi-3d, dan ini semua mengasumsikan bahwa Anda bekerja di 2d.