C / C ++ ile platformlar arası bir oyun oluştururken herhangi bir ipucunuz / öneriniz var mı?
C / C ++ ile platformlar arası bir oyun oluştururken herhangi bir ipucunuz / öneriniz var mı?
Yanıtlar:
Soyutlama katmanlarının arkasına platforma özgü her şeyi gizleyin
Bu, oluşturma, ses, kullanıcı girişi ve dosya GÇ gibi şeyler anlamına gelir. Bir çalışma zamanı performans cezası yaratmadan, platforma özgü uygulama dosyalarına sahip platform-agnostik başlıklar olduğunu çıkarmak için yaygın bir püf noktası:
// FileSystem.h
class FileSystem {
public:
FileHandle OpenFile(const char * path);
// other stuff...
}
// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
// call windows API...
}
Ardından, her platform için yapıları uygun .cpp dosyasına karşı oluşturulacak şekilde yapılandırın.
İçerik boru hatlarınızı platformdan bağımsız varlıklar olarak okutun ve her platform için platforma özgü içeriği çıkarın
Örneğin, dokularınızı .tga veya sadece .psd olarak yazınız, daha sonra bunları otomatik olarak ihtiyacınız olan farklı platforma özel formatlara dönüştürebilen bir boru hattınız olacaktır.
Verilerinizde belirli bir bellek düzeni veya endianness olduğunu varsaymayın
Platformlar bayt sırası, dolgu, hizalama ve kelime boyutuna göre değişebilir. Bunu önemseyen herhangi bir kod tüm platformlarda iyice test edilmelidir.
Her zaman tüm platformlarda test edin
Sen edecek platforma özel böcek tarafından ısırıldı. Hemen şimdi ısırılmayı mı tercih edersin yoksa oyunu kapıdan çıkarmaya çalışırken mi?
Platformdan platforma giderken size asgari güçlük verecek opengl / sdl benzeri bir api kullanın.
Hangi platformları desteklemek istediğinizi bildiğinizden emin olun. Opengl'i kullanmayın, çünkü gelecekte çoklu platformları desteklemek isteyebileceğinizi düşünüyorsunuz. Devam etmek istediğin gibi başla.
Desteklemek istediğiniz platformların her birinde hangi donanım sınırlamalarının olduğunu öğrenin.
#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif
Kodun her yerine saçılmasını önlemek için deneyin .
Bazen kolay yol gibi gözükse de, uzun vadede size sıkıntılar yaşatır. Her platform uygulamasının kendi kendine yetmesi için onları kendi dosyalarıyla sınırlandırmaya çalışmalısınız.
Bir platform eklemek çoğunlukla yeni uygulama dosyaları eklemek ve gerekli olan az sayıdaki dosyayı değiştirmekle ilgili olmalıdır.
Kendileri platformlar arası pek çok kütüphane var; herhangi bir yerde çalışmak için doğrudan OpenGL'ye yazmanıza gerek yoktur. OGRE, isimlendirmek isteyeceğiniz herhangi bir platformda çalışan bir oluşturma motoruna harika bir örnektir.
Tecrübelerime göre en büyük endişe sizin yapı sisteminizdir. Windows'ta Visual Studio ile geliştirirseniz, kodunuz Linux'ta derlenebilir, ancak kolayca oluşturmak için zor zamanlar geçirirsiniz . Platforma özgü proje dosyaları oluşturmak için aynı derleme talimatlarını kullanabilen CMake gibi derleme sistemlerine bakın (linux'taki dosyalar, pencerelerde VS Projeleri, Mac'te XCode Projeleri, vb.).
Dosyaları kaydetmek ve yüklemek veya bir ağ üzerinden iletişim kurmak için işlevlerinizi yazarken, endianness'i unutmayın .
Fread / fwrite veya bunun gibi düşük bir seviyeye tek bir çağrı ile büyük bir yapı okumak yerine, bir ReadByte / WriteByte ve ReadFloat / WriteFloat oluşturun. Ardından, daha sonra farklı bir platform hedeflemeye karar verirseniz, değişiklik yapacak daha az yeriniz olur.
#ifdef PLATFORM_WIN
ftw eksikliği