Doğrudan çıkacağım ve soruda tarif ettiğiniz problemi nasıl çözeceğimizi bilmediğimi söyleyeceğim (iso-kiremit şeklindeki dikdörtgenler arasındaki çarpışma tespiti), ancak geçmişte başkalarının bunu nasıl çözdüğünü söyleyebilirim :
Diğer oyunlarda bitti yolu ayırmaktır oyun dünyasını gelen ekran dünyası . Başlarken, bunların aynı şey olduğunu hayal etmek yaygındır, ancak daha sonra tanımladığınız gibi sorunlara yol açar.
Genel fikir, oyun dünyasının tamamen bellekte, sahnelerin arkasında saklandığı, sadece sayılar, referanslar ve mantık olduğu. Oyun dünyasını izometrik olarak çiziyor olmanız önemsizdir. Oyun dünyanız izometrik veya kare kavramına sahip olmamalı veya ekran 3D olarak çiziliyor olsa bile. Tüm bunlar oyun dünyasını ekrana ( ekran dünyası olarak da bilinir ) çektiğinizde halledilir . Oyun dünyası, oyun için mantıklı olan en basit şekilde saklanmalı ve korunmalıdır, izometrik oyunlarda, genellikle iso olduğu gerçeğini tamamen görmezden gelir ve bunun yerine pozisyonları eksene hizalanmış bir ızgara kullanıyormuş gibi saklarsınız. En çok oyun iki dünya arasında koordinatları dönüştürmek için yöntemler olacak, benim çağırır ScreenToWorld(x, y)veWorldToScreen(x, y). Dönüşüm genellikle Matrix matematiği ile yapılır, ancak başka yollarla da elde edilebilir. Fareyi kullanırken ScreenToWorld'ü ve çizim yaparken WorldToScreen'i kullanacaksınız.
Oyun dünyasını ve ekran dünyasını bölmenin birçok avantajı vardır . Avantajlardan biri, çarpışma algılama ve hareketin oyun dünyasında gerçekleşmesidir ve bu nedenle eğimli bir ızgara veya çarpık koordinatlar veya ekranın nerede olduğu vb. , eksene hizalanmış dikdörtgenler ve karelerle ilgileniyor olacaksınız. Oyun dünyası güncellendikten sonra, oyun dünyasının bir temsilini ekrana, anahtar kelime: gösterim olarak çizersiniz. İlk başta karşı sezgisel görünebilir, ancak ekranınız sadece oyun dünyasında neler olduğunun bir temsilidir. Bu, özel sunucular ve terminal benzeri istemciler gibi şeyleri mümkün kılar.
FreeCiv aslında tüm bunların harika bir örneğidir. Aşağıdakilerden herhangi biriyle aynı dünyayı görebilirsiniz: bir kare Kuzey / Güney Izgara, İzometrik ve hatta Hex. Çalıştırdığınız her oyun, tek oyunculu oyunlar için bile arka planda çalışan özel bir sunucuya sahiptir, bu nedenle istemci aynı zamanda sadece bir ekran bağlantı noktasıdır, başka bir şey değildir.
Uzun lafın kısası: Oyun dünyasını ve mantığı ekran dünyasından ayırmak oyun mantığını basitleştirir, oyunu <-> ekran bağlantılarını azaltır ve buna karşılık "iso" fayansları arasındaki çarpışma tespitini işlemeyi kolaylaştırır ve görselleştirmeyi kolaylaştırır.