şu anda bir çini tabanlı oyun benim kendi çalışma üzerinde çalışıyorum (Terraria düşünüyorum, ama daha az fantastik (Bence bu bir kelime? Değilse özür dilerim)).
Her neyse, şu anda benim için büyük bir adım olan çarpışma tespiti çalışıyor (köşe vakaları için bile!). Bir sprite'ın bir bloktan geçmediğini görmek konusunda son derece sevindirici bir şey var. Ama sonra karşılaştırma yapma fikrim vardı. Kötü bir fikir.
1.000 kare, sorun değil. 10,000 karakter, 3 karakter için biraz laggy oldu. 100.000 kare (gerçekten büyük harita), 3 karakter için oynanamazdı.
Oyuncudan çok uzaktaki blokları, karakterleri, eşyaları vb. Düşünmek istemediğim bir sorun yaşıyorum, ancak sürekli olarak bellek içi olmayanları yüklemek istemiyorum.
İşte şimdiye kadar algoritmam, eleştirmekten çekinmeyin.
foreach (Block in level)
{
if (distance from block to player > a specified amount)
ignore this block;
else
{
get the intersection depth between the two bounding boxes
if (depth of intersection != Zero-vector)
{
check y size vs x size
resolve on smallest axis
}
}
}
Dikkat edeceğiniz gibi, seviye boyutu büyüdüğünde, bu algoritmanın sırası N blokla büyür. Oyuncunun yakınında bile olmayan blokları bile düşünmek istemiyorum.
Ben belki bir (0,0) (mapWidth, mapHeight) bir liste yerine blok çift dizi kullanmak, kişinin pozisyonuna bağlı olarak bir tehlike bölgesi hesaplamak, örneğin, oyuncunun pozisyon (10, 20) ise düşünüyorum (0, 10) ila (20, 30) arasında görünecektir.
Herhangi bir düşünce ve düşünceniz harika, teşekkür ederim.