2010-02-02 21 views
6

Oyunlar için gerçek mantıksal gelişim hakkında birçok bilgi bulabildim. Gerçekten bir kart oyunu yapmak isterdim, ama fare pozisyonuna bağlı olarak, bir nesnenin nasıl seçilebileceğini (veya uygun bir şekilde en azından) nasıl anlayabileceğimi anlamıyorum. İlk önce sınırlayıcı kutu kontrolünü düşündüm ama tüm bitmaplerim dikdörtgenler değil. Sonra her nesnenin farklı bir rengi olan gizli bir arabellek oluşturduğunu sanıyordum, ama bu şekilde yapmak zorunda kalmak saçma görünüyor. Gerçekten nasıl yapıldığını merak ediyorum. Örneğin, Adobe Flash, farenin altındaki nesneyi nasıl biliyor?Basit bir oyun oluşturma yöntemi GUI

+0

Sadece 2B uygulamaları hakkında mı konuşuyorsunuz? – Andres

cevap

6

Sorunuz

Teşekkür fare olmayan bir dikdörtgen bitmap üzerindeyse anlatmak için nasıl. Tüm bitmap'lerin gerçekten dikdörtgen olduğunu varsayıyorum ama şeffaf bölgeleri var. Kullandığınız şemaya bağlı olarak (örneğin, bir rengi saydam olarak veya bir bit maskesi kullanırsanız), (dikdörtgen) bitmap'inizin hangi kısmının şeffaf olduğunu bir şekilde söyleyebilmeniz gerekir. Ayrıca, tuvalinizdeki bitmap'lerin z sırasını (katmanlama) da bileceksiniz. Sonra (x, y) konumunda bir tıklama saptadığınızda, o piksele yayılan dikdörtgen bitmap'lerin listesini bulmanız gerekir. Z sırasına göre sıralayın ve her biri için pikselin saydam olup olmadığını kontrol edin. Varsa, bir sonraki bitmap'e geçin. Hayır ise, o zaman bu seçilen bitmap'dir.

1

Ya da geometrik çözümü kullanabilirsiniz. Kartın/öğenin geometrisini saklamanız/yönetmeniz gerekir. Örneğin, daireler, dikdörtgenler gibi şekiller listesi.

Çok fazla zamanınız varsa, belki de üçgenler veya elipsler. Bir üçgenin bir noktanın olup olmadığını söylemek, matematiksel bir sorudur ve üçgen çok inceyse sayısal olarak kararsız olabilir (algoritmanın bir bölümü vardır).. Düzeltme: How to determine if a point is in a 2D triangle?

Abc için oy verdim.

+1

Sayısal kararsızlık bir sorun değil. Bitmapler (ör. Ekran) ayrıktır, dolayısıyla tamsayı matematik kullanırsınız. Eğim değerlerini hesaplamıyorsunuz - uç noktaların ağırlıklı ortalamalarını hesaplıyorsunuz. Bir satır xa ile bir nokta için (x1, y1) 'den (x2, y2)' ye kadar çalışırsa, ya = y1 + (((y2-y1) * (xa-x1))/(x2-x1)) elde edersiniz. Ara sonuçlar için tamsayılarınızda yeterli bit bulunduğundan emin olmanız gerekir, ancak sadece bir bölüm var ve bölen de oldukça uysal. – Steve314

+0

Yine de yine de büyük bir değer. – Steve314