Düzenli bir dama tahtası ile aynı mantığı kullanan basit ve alternatif bir yaklaşım buldum. Her döşemenin ortasındaki ve her tepe noktasındaki noktalarla (daha sıkı bir ızgara oluşturarak ve alternatif noktaları göz ardı ederek) ızgaraya yapışan bir etki yaratır.
Bu yaklaşım, oyuncuların fayans ve köşe noktaları ile etkileşime girdiği Catan gibi oyunlar için iyi çalışır, ancak oyuncuların yalnızca fayanslarla etkileşime girdiği oyunlara uygun değildir, çünkü koordinatların hangi altıgen karo yerine en yakın merkez noktasına veya tepe noktasına döndüğü koordinatlar içindedir.
Geometri
Döşemenin genişliğinin dörtte biri olan sütunları ve döşemenin yüksekliğinin yarısı olan satırları içeren bir ızgaraya nokta yerleştirirseniz, bu deseni alırsınız:
Daha sonra, bir dama tahtası desenindeki (atlama if column % 2 + row % 2 == 1
) her ikinci noktayı atlamak için kodu değiştirirseniz, bu desenle sonuçlanırsınız:
uygulama
Bu geometri göz önünde bulundurularak, ızgaradaki x, y
her nokta için koordinatları (ilk diyagramdan) saklayan bir 2D dizi (tıpkı bir kare ızgarada olduğu gibi) oluşturabilirsiniz - böyle bir şey:
points = []
for x in numberOfColumns
points.push([])
for y in numberOfRows
points[x].push({x: x * widthOfColumn, y: y * heightOfRow})
Not: Bir ızgara oluştururken, normal olarak, yaklaşık noktaları (yerine noktalar yerleştirilerek de nokta kendileri) kullanarak, kökeni (bir sütunun yarı genişliğini çıkarılarak dengelemek için ihtiyaç x
ve bir satırın yarı yüksekliği y
).
Şimdi 2D dizinizi ( points
) başlattığınıza göre, fareye en yakın noktayı tıpkı kare bir ızgarada yaptığınız gibi bulabilirsiniz, sadece ikinci diyagramda desen üretmek için diğer tüm noktaları göz ardı etmek zorundasınız:
column, row = floor(mouse.x / columnWidth), floor(mouse.y / rowHeight)
point = null if column % 2 + row % 2 != 1 else points[column][row]
Bu işe yarayacaktır, ancak koordinatlar işaretçinin içinde bulunduğu görünmez dikdörtgenin temelinde en yakın noktaya (veya noktaya) yuvarlanır. Gerçekten noktanın etrafında dairesel bir bölge istiyorsunuz (böylece ek aralık her yönde eşittir). Şimdi hangi noktayı kontrol edeceğinizi bildiğinize göre, mesafeyi kolayca bulabilirsiniz (Pisagor Teoremini kullanarak). Zımni dairenin orijinal sınırlayıcı dikdörtgenin içine sığması, maksimum çapını bir kolonun genişliğiyle (bir döşemenin genişliğinin çeyreği) sınırlaması gerekir, ancak bu pratikte iyi çalışacak kadar büyüktür.