Elmas şeklindeki bir dünyada arsa (dünya-> ekran) ve fare toplama (dünya-> ekran) izometrik fayansları için bir formül arıyorum. Denedim olanlar her zaman iyi görünüyor. Bunu yapmanın normal / doğru yolu nedir?
Elmas şeklindeki bir dünyada arsa (dünya-> ekran) ve fare toplama (dünya-> ekran) izometrik fayansları için bir formül arıyorum. Denedim olanlar her zaman iyi görünüyor. Bunu yapmanın normal / doğru yolu nedir?
Yanıtlar:
Yorumunuza dayanarak, x, y değerlerini ekran koordinatlarına dönüştürmek için kullanıyorum. Şimdi, "3d fayansları" hesaba katmıyor, her şey aynı düzlemde sayılıyor, bu yüzden önemli olan bir oyun yazıyorsanız, bu kod çalışmayacak.
//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;
}
nokta basitçe x ve y inç içeren bir yapıdır, TILE_WIDTH sizin durumunuzda 64, TILE_DEPTH kötü bir şekilde adlandırılır (aslında çini grafiklerinin yüksekliğidir), ama sizin durumunuzda 32 olacaktır. Ötelemeler, döşeme haritanızın farklı bir x, y konumunda (döşemelerin başka bir döşeme kümesinin üstünde olmasını istemek gibi) "başlatılmasını" istiyorsanız. Tipik olarak ofset 0,0 olabilir.
Bu, aşağıdaki gibi üstte, ortada 0,0 ile bir harita oluşturacaktır:
0,0
0,1 1,0
0,2 1,1 2,1
X işaretini bulmak için, imlecin y harfi:
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;
Bu kod parçasında, mX ve mY, "dünya koordinatlarında" nerede olduğumuzu bulmak için kamera değerleriyle birleştirdiğimiz fare ekranı koordinatlarıdır. Geriye kalan her şey önceki kod örneğiyle aynı.
Bir kez daha, bu düz bir 2d izometrik karo haritası varsayar. Haritanın yarı-3d görüntüsünü kullanmak istiyorsanız, bazı ek çalışmalar var ve bunların hepsi yine de 2d'de çalıştığınızı varsayar.