2011-07-07 20 views
11

Altıgen ızgara kullanan bir TBS oyunu üzerinde çalışıyorum. Ancak İzometrik altıgen bir döşeme motorundaki ekran-harita koordinatlarını dönüştürme?

, bunu başarmak için ben değerlerle keman vardı (kiremit boyutu: Ancak, bu (güzel görünüyor ve piksel gösterişli) izometrik olmak istedim ve fayans motoru iyi çalışıyor, bu sonucudur fayansların doğru şekilde takılmasını sağlamak için döşeme algoritması. İşte örnek bir çini:

Karo boyutu 62x32'dir ve döşendiğinde, her döşeme doğru bir şekilde sığdırmak için x üzerinde 47 (cw) ve y (16 (ch)) konumuna getirilir.

Bu koordinatları ben haritadan (fayans çizim için) ekran cordinates hesaplamak nasıl:

function toScreen(x, y, z, offset) 
{ 
    offset = ifndef(offset, {x: 0, y: 0}); 
    var ret = new Vector2D(y*Tile.cw + x*Tile.cw -offset.x, -x*Tile.ch + y*Tile.ch -offset.y -z*16); 
    ret.y += (Tile.height*this.h)/2; //center the map on screen 
    return ret; 
} 

Şimdi, fayans seçin ve harita ekranından koordinatları elde edebilmek için gereken (fare) koordine eder. Koordinatları bir şekilde dönüştürmenin bile mümkün olup olmadığını anlayamıyorum (bütün girişimlerim başarısız oldu). karoların

seçimi, tabii ki, piksel mükemmel olması gerekir, ama sadece düz kiremitler için (gerek yoktur:

Bu

harita sistemi fayans çizilir nasıl benziyor ve koordinat nedir yukarıdaki karo üzerinde ilerleyen ağaçları seçmek için), böylece algoritma tüm karoların düz olduğunu varsayabilir (örnek olarak verdiğim gibi). Bunun nasıl yapılacağı konusunda herhangi bir fikri var mı? Karo [0,0] 'da ekran boşluğuna dönüştürerek ve işaretçinin içeride olup olmadığını ya da ne kadar uzak olduğunu görerek "kaba kuvvet" yapabilirim, sonra da yavaş yavaş fayansı kaçırana kadar fare koordinatlarını içeren karo (ya da yok bir karo), ancak varsa daha zarif bir çözüm arıyorum.

Herhangi bir fikri olan var mı?

Teşekkürler.

+1

+1. – Goles

cevap

7

altıgen şebekelerinin derinlemesine bir tedavi için bu makaleye göz atın: altıgen koordinatlara dikdörtgen koordinatları dönüştürmek için nasıl bir bölüm var http://playtechs.blogspot.com/2007/04/hex-grids.html

. Altıgenleri normal altıgenlere dönüştürerek ekstra bir afine dönüşümü ekleyerek yöntemini "isometic altıgen döşemeye" kolayca uyarlayabilirsiniz. İyi yapılandırılmış soru için

+0

Böyle bir şey arıyordum ama bulamadım. Bu biraz belirsiz, ama yeterince açıkladı. Çok teşekkür ederim :) – fingerprint211b