Bir oyunu programlama sürecinde bayt siparişleri hakkında endişelenmeli miyiz? Oyun konsolları farklı bayt siparişleri kullanıyor mu?
Bir oyunu programlama sürecinde bayt siparişleri hakkında endişelenmeli miyiz? Oyun konsolları farklı bayt siparişleri kullanıyor mu?
Yanıtlar:
Bunun için endişelenmen gerekiyor mu? Muhtemelen hayır. Oyun programlamasının büyük çoğunluğu, endianitenin soyutlanacağı bir seviyede olacak. Ağ oluşturmada bile, neredeyse kesinlikle ağ protokolleri için bir kütüphane kullanacaksınız. Bunun farkında olmanız iyi, ama bununla ilgili bir sorunla karşılaşacağınızdan şüpheliyim.
Çoğu zaman, hayır.
Endianess genellikle bir oyun motorunun yüksek seviye modüllerinde soyutlanır ve günlük olarak endişelenmenize gerek yoktur. Eğer soyutlanmazsa, motorun ciddi bir sorunu vardır ve düzeltilmelidir, çünkü bu bir oyun yaparken endişelenmeniz gereken ayrıntılar değildir.
Ancak bir C / C ++ çok platformlu motorun bazı düşük seviyeli parçaları üzerinde çalışıyorsanız, bununla uğraşmanız gerekebilir. Mevcut üç gen konsolu da big-endian olan bir PowerPC mimarisi kullanırken PC'de kullanılan x86 mimarisi küçük-endian. Bu nedenle, veri yapılarına (ikili serileştirme, ağ ...) koymak için bir yerden ham bayt okuyan bir kod üzerinde çalışıyorsanız, evet bununla uğraşmanız gerekecek.
Örneğin, C / C ++ 'da, bu tür bayt değişimini çalışırken görmek yaygındır (test edilmemiştir, düzeltmeleri memnuniyetle karşılar):
// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
return (u16(data[1]) << 8) + u16(data[0]);
#endif
}
Bir kez daha, bu düşük seviyeli kodda sorun yok, ama bu her yerde kullanılan bir şey olmamalı.
Hedeflediğiniz platformlara bağlıdır. Örneğin, PS3'ün büyük bir şey olduğuna inanıyorum, bu yüzden hedeflerinizden biri ise, o zaman bilmeniz gereken bir şey, evet.
Ev bilgisayarı alanında "Big 3" (Windows, Linux, Mac) bu günlerde Intel x86 / x64 mimarilerinde yalnızca veya tamamen hariç, hepsi bu nedenle, endişe endişeleri artık geçerli değil.