คุณมีคำแนะนำ / คำแนะนำใด ๆ เมื่อสร้างเกมข้ามแพลตฟอร์มใน C / C ++ หรือไม่
คุณมีคำแนะนำ / คำแนะนำใด ๆ เมื่อสร้างเกมข้ามแพลตฟอร์มใน C / C ++ หรือไม่
คำตอบ:
ซ่อนอะไรเฉพาะแพลตฟอร์มไว้ข้างหลังเลเยอร์สิ่งที่เป็นนามธรรม
สิ่งนี้หมายถึงสิ่งต่าง ๆ เช่นการเรนเดอร์เสียงอินพุตของผู้ใช้และไฟล์ IO เคล็ดลับทั่วไปอย่างหนึ่งในการทำให้เป็นนามธรรมโดยไม่ทำให้เกิดการลงโทษประสิทธิภาพในขณะทำงานคือส่วนหัวที่ไม่เชื่อเรื่องแพลตฟอร์มที่มีไฟล์การใช้งานเฉพาะแพลตฟอร์ม:
// FileSystem.h
class FileSystem {
public:
FileHandle OpenFile(const char * path);
// other stuff...
}
// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
// call windows API...
}
จากนั้นกำหนดค่าการสร้างสำหรับแต่ละแพลตฟอร์มเพื่อสร้างกับไฟล์. cpp ที่เหมาะสม
ทำให้ไพพ์ไลน์เนื้อหาของคุณอ่านในเนื้อหาที่ไม่ขึ้นกับแพลตฟอร์มและเนื้อหาเฉพาะแพล็ตฟอร์มสำหรับแต่ละแพลตฟอร์ม
ตัวอย่างเช่นเขียนพื้นผิวของคุณเป็น. tga หรือเพียงแค่. psd จากนั้นมีขั้นตอนการทำงานที่สามารถแปลงรูปแบบเหล่านั้นให้เป็นรูปแบบเฉพาะแพลตฟอร์มที่คุณต้องการโดยอัตโนมัติ
อย่าถือว่ารูปแบบหน่วยความจำหรือ endianness เฉพาะในข้อมูลของคุณ
แพลตฟอร์มอาจแตกต่างกันไปตามลำดับไบต์การแพ็ดการจัดตำแหน่งและขนาดของคำ รหัสใด ๆ ที่สนใจจะต้องมีการทดสอบอย่างละเอียดในทุกแพลตฟอร์ม
ทดสอบบนแพลตฟอร์มทั้งหมดตลอดเวลา
คุณจะถูกกัดด้วยบั๊กเฉพาะแพล็ตฟอร์ม คุณค่อนข้างจะถูกกัดหรือตอนที่คุณพยายามจะออกไปข้างนอก?
ใช้ api เช่น opengl / sdl ซึ่งจะทำให้คุณมีความยุ่งยากน้อยที่สุดเมื่อไปจากแพลตฟอร์มสู่แพลตฟอร์ม
ตรวจสอบให้แน่ใจว่าคุณรู้ว่าแพลตฟอร์มใดที่คุณต้องการให้การสนับสนุน อย่าใช้ OpenGL เพียงเพราะคุณคิดว่าคุณอาจต้องการรองรับหลายแพลตฟอร์มในอนาคต เริ่มตามที่คุณตั้งใจจะทำ
รู้ว่ามีข้อ จำกัด ของฮาร์ดแวร์ใดบ้างในแต่ละแพลตฟอร์มที่คุณต้องการสนับสนุน
พยายามหลีกเลี่ยงการกระจาย#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif
ทั่วรหัส
บางครั้งดูเหมือนว่ามันเป็นวิธีที่ง่ายกว่า แต่มันจะทำให้คุณมีปัญหาในระยะยาว คุณควรพยายาม จำกัด ให้อยู่ในไฟล์ของตนเองเพื่อให้ทุกการใช้งานแพลตฟอร์มนั้นมีอยู่ในตัว
การเพิ่มแพลตฟอร์มควรส่วนใหญ่เกี่ยวกับการเพิ่มไฟล์การนำไปใช้งานใหม่และเพียงแค่ปรับเปลี่ยนไฟล์ที่จำเป็นที่มีอยู่สองสามตัว
มีห้องสมุดมากมายที่เป็นของตัวเองข้ามแพลตฟอร์ม คุณไม่จำเป็นต้องเขียนโดยตรงใน OpenGL เพื่อให้ทำงานได้ทุกที่ OGRE เป็นตัวอย่างที่ยอดเยี่ยมของเอ็นจิ้นการเรนเดอร์ที่ใช้ได้กับทุกแพลตฟอร์มที่คุณสนใจ
จากประสบการณ์ของฉันความกังวลที่ยิ่งใหญ่ที่สุดคือระบบการสร้างของคุณ หากคุณพัฒนาบน Windows ด้วย Visual Studio รหัสของคุณอาจรวบรวมใน Linux แต่คุณจะมีเวลาที่ลำบากในการสร้างมันขึ้นมาได้อย่างง่ายดาย ดูระบบ build เช่น CMake ที่สามารถใช้คำสั่ง build เดียวกันเพื่อสร้างไฟล์โปรเจ็กต์เฉพาะแพล็ตฟอร์ม (makefiles บน linux, VS Projects บน windows, XCode Projects บน Mac, ฯลฯ )
เมื่อมีการเขียนฟังก์ชั่นของคุณสำหรับการออมและการโหลดไฟล์หรือการสื่อสารผ่านเครือข่ายอย่าลืมเกี่ยวกับendianness
แทนที่จะอ่านโครงสร้างขนาดใหญ่ด้วยการเรียกเพียงครั้งเดียวเพื่อ fread / fwrite หรือสิ่งที่ระดับต่ำเช่นนั้นสร้าง ReadByte / WriteByte และ ReadFloat / WriteFloat จากนั้นคุณจะมีสถานที่เปลี่ยนแปลงน้อยลงหากคุณตัดสินใจกำหนดเป้าหมายแพลตฟอร์มอื่นในภายหลัง
#ifdef PLATFORM_WIN
ftw