การพัฒนาข้ามแพลตฟอร์ม C ++ / OpenGL ES (iOS / Android) [ปิด]


10

ฉันมีประสบการณ์ที่สมเหตุสมผลกับ C ++ และ OpenGL และฉันเพิ่งตัดสินใจลองพัฒนาเกมมือถือ หลังจากประสบความสำเร็จในการสร้างแอป OpenGL ES Android อย่างง่ายโดยใช้ Java ฉันวิจัยวิธีกำหนดเป้าหมายทั้ง Android และ iOS ด้วยรหัสการเขียนใหม่ให้น้อยที่สุดเท่าที่จะทำได้ ฉันลองใช้เครื่องมือพัฒนาแอพข้ามแพลตฟอร์มที่ภูมิใจของ Visual Studio 2015 แต่พบว่ามันใหม่เกินไปและมีการจัดทำเอกสารน้อยมาก ฉันสามารถสร้างเทมเพลตโครงการที่โปรแกรมมอบให้ฉัน แต่ฉันไม่สามารถหาวิธีได้จากเทมเพลตเหล่านี้ฉันอาจเพิ่มเนื้อหาลงในเกมหรือจัดการกับหน้าจอสัมผัส

ฉันมีความปรารถนาที่เฉพาะเจาะจง แต่น่าเสียดายที่เฉพาะเจาะจงที่จะค้นหาด้วย Google ฉันต้องการสร้างเกม OpenGL ES โดยใช้ C ++ พร้อมโปรแกรมเสริมเฉพาะแพลตฟอร์มสำหรับ Android และ iOS ผู้คนถามคำถามที่คล้ายกันกับฉัน (แต่ไม่เหมือนกัน) และมากกว่าหนึ่งคนที่ตอบกลับระบุว่าสิ่งที่ฉันต้องการจะทำไม่เพียงเป็นไปได้ แต่ค่อนข้างง่ายเนื่องจากฉันไม่ต้องกังวลเกี่ยวกับ UI

ฉันลองใช้บทช่วยสอนนี้แต่มันเกือบสามปีแล้วดังนั้นอาจได้รับการออกแบบมาสำหรับเทคโนโลยีที่เก่ากว่าและด้วยเหตุนี้ฉันจึงพบข้อบกพร่องหลายอย่างที่ไม่สามารถอธิบายได้ อย่างไรก็ตาม ณ ตอนนี้กวดวิชานั้นเป็นสิ่งที่ใกล้เคียงที่สุดกับสิ่งที่ฉันต้องการที่ฉันได้พบ ทุกอย่างอื่นเป็นได้ทั้ง Android เท่านั้นหรือแนะนำให้ฉันจ่ายหลายร้อยดอลลาร์ต่อปีเพื่อใช้ Marmalade SDK บางครั้งฉันรู้สึกเหมือนเพิ่งเขียนโค้ดสองครั้งครั้งเดียวใน Java และอีกครั้งใน Objective-C แต่ฉันได้รับแรงบันดาลใจจากความรู้ที่ว่าวิธีนี้เป็นไปได้ แต่ด้วยเหตุผลบางอย่างไม่ครอบคลุมทุกที่ในรายละเอียดที่ทันสมัย

เพื่อสรุปฉันต้องการสร้างเกม OpenGL ES สำหรับ iOS และ Android โดยมีรหัสฐาน C ++ เดียวห่อด้วยรหัสเฉพาะแพลตฟอร์มจำนวนเล็กน้อย อย่างไรก็ตามแม้จะมีข้อเท็จจริงที่ว่ามีหลายคนแนะนำวิธีนี้ แต่ก็ไม่มีใครบอกได้ว่าทำอย่างไร ใครสามารถบอกฉันว่ามันเป็นไปได้จริงและถ้าเป็นเช่นนั้นฉันจะทำอย่างไรหรือฉันจะไปเรียนที่ไหน


ลองcocos2d-xหรือunity3d
Ali1S232

1
unity3d อยู่ไกลจากสิ่งที่ OP ขอเนื่องจากคุณไม่มีสิทธิ์เข้าถึงแหล่งข้อมูล ฉันใช้ cocos2d-x และปัญหาการรวบรวมยังคงอยู่ในระดับหนึ่ง อิทธิพลของ Objective-C ก็ให้ความรู้สึกเช่นกันบางคนอาจชอบสิ่งนั้น แต่สำหรับฉันแล้ว มันเป็นโซลูชันโอเพ่นซอร์สดังนั้นอาจคุ้มค่ากับเวลาที่ใช้ในการตรวจสอบ
Matthew Sanders

คำตอบ:


6

คุณอาจพบคำตอบของฉันสำหรับคำถามที่คล้ายกันที่นี่เพื่อเป็นประโยชน์

คุณอาจพบว่ามีประโยชน์ในการดูซอร์สโค้ดของโซลูชันอื่น ๆ Godot เครื่องยนต์เช่นเป็นเครื่องมือข้ามแพลตฟอร์มที่มาเปิดเกมเพื่อให้คุณไม่ต้องจ่ายอะไร

ตามที่ฉันพูดถึงในคำตอบอื่น ๆของคุณคุณไม่จำเป็นต้อง (และไม่น่าจะเป็นไปได้) พึ่งพา IDE หนึ่งตัวเพื่อทำงานให้คุณ CMake , Sconsและเครื่องมือบิลด์อื่น ๆสามารถช่วยในกระบวนการคอมไพล์ / สร้างบิลด์ข้ามแพลตฟอร์มและ IDE

Godot เครื่องยนต์ , ตัวอย่างเช่นใช้sconsและLLVMโครงการ (aka กรอบคอมไพเลอร์ที่ใช้โดยเสียงดังกราวคอมไพเลอร์ C / C ++ / Objective-C) ใช้CMake

แนวทางที่เป็นที่นิยมสำหรับเกมคือการสร้างเอ็นจิ้นใน C / C ++ และตามที่คุณพูดถึง เมื่อพูดถึง iOS และ Android นี่เป็นตรรกะการจัดการวงจรชีวิตที่เชื่อมต่อกับระบบปฏิบัติการ หากคุณต้องการใช้ไมล์พิเศษและใช้Emscriptenเพื่อคอมไพล์เป็นasm.jsและใกล้เคียงกับความเร็วดั้งเดิมในเบราว์เซอร์คุณกำลังทำสิ่งที่คล้ายกันกับการสรุปการวนรอบหลักที่อยู่เบื้องหลังจำนวนการร้องขอการเรียกใช้เฟรมภาพเคลื่อนไหว

Emscriptenแนะนำให้ใช้SDLเพื่อทำให้กระบวนการย้ายง่ายขึ้นเนื่องจากสามารถช่วยในการจัดการกับข้อมูลเฉพาะของแพลตฟอร์ม แต่ไม่มีอะไรหยุดคุณจากการทำสิ่งนี้ด้วยตัวคุณเอง

หากคุณเป็นคนบ้าจริง ๆ คุณสามารถทำสิ่งที่ฉันกำลังทำและเขียนภาษาของคุณเองโดยใช้พลังของLLVMเพื่อรวบรวมภาษา C ABIหรือแม้แต่JITบนแพลตฟอร์มที่รองรับ

ประเด็นคือใช่มันเป็นไปได้จริง ๆ แต่ถนนบางสายซับซ้อนกว่า / ใช้เวลานานกว่าและอื่น ๆ

หมายเหตุ:คุณอาจจำเป็นต้องใช้ Mac OSX ผ่าน Mac, VMหรือ Hackintoshด้วย XCodeเพื่อคอมไพล์เป็น iOS นี่คือหนึ่งในหลาย ๆ เหตุผลที่ฉันพบว่า Macbook Pro เป็นตัวเลือกที่ยอดเยี่ยมสำหรับระบบการพัฒนา

Note2:มันเป็นสิ่งที่ควรค่าแก่การกล่าวขวัญว่าเอ็นจิ้นข้ามแพลตฟอร์มจำนวนมากในปัจจุบันใช้ภาษาสคริปต์สำหรับตรรกะเฉพาะของเกม ความสามัคคีไม่ยอมให้คุณใกล้กับซอร์สโค้ดของตัวอย่าง (แม้ว่าคุณสามารถเขียนปลั๊กอินดั้งเดิม) สิ่งนี้สามารถช่วยให้รอบการพัฒนาเร็วขึ้นและทำให้พอร์ตน้อยที่สุดเนื่องจากภาษาสคริปต์นั้นค่อนข้างไม่เชื่อเรื่องพระเจ้าแพลตฟอร์ม เป้าหมายสำหรับภาษาของฉันคืออนุญาตทั้ง JIT (ส่วนใหญ่เป็นการประหยัดเวลาในการพัฒนา) และการรวบรวมแบบคงที่

Note3:หากคุณยังไม่พบสิ่งนี้ หากคุณไม่ได้ใช้ SDL หรือโซลูชันอื่น ๆ ที่เป็นนามธรรมเฉพาะแพลตฟอร์มคุณจะต้องใช้คุณสมบัติการเชื่อมต่อ C / C ++ เฉพาะของแต่ละแพลตฟอร์ม ด้วย iOS มันค่อนข้างง่ายใน XCode เนื่องจากคอมไพเลอร์ (เสียงดังดังที่กล่าวข้างต้น) รองรับ C / C ++ แล้ว สำหรับ Android คุณต้องใช้การโทร NDKและมาร์แชลระหว่าง Java และ C / C ++


1
ฉันดูที่ซอร์สโค้ดของ Godot Engine ดูเหมือนว่าจะมากไปหน่อย ฉันต้องการสร้างของตัวเองโดยไม่มีคุณสมบัติที่ฉันไม่ต้องการ ฉันไม่แน่ใจว่าจะทำเช่นนั้นได้อย่างไร ฉันยังไม่สามารถเรียกใช้รหัส C ++ บน Android ได้สำเร็จ
Craig Horwood

hehe ... ยา NDK ไม่ใช่ปิคนิค สุจริตฉันพบ google เพื่อต้องการความช่วยเหลือในหมวดหมู่นักพัฒนาที่เป็นมิตร ใช้การ จำกัด การใช้ SDL สำหรับคุณหรือไม่ ฉันมีข้อมูลมากขึ้นฉันสามารถอัปเดตคำตอบหากจำเป็น
Matthew Sanders

SDL ไม่ใช่ข้อ จำกัด แต่ฉันไม่ต้องการไปที่นั่น มีความรู้นิดหน่อยที่ทำได้โดยไม่ต้องมีกรอบ
Craig Horwood

ฉันถูกแมลงกัดต่อเนื่องตลอดเวลาดังนั้นฉันจึงรู้ว่าคุณรู้สึกอย่างไร ฉันเคยใช้ NDK มาก่อนและฉันไม่คิดว่าจะมีการเปลี่ยนแปลงอะไรมากมายในวิธีการตั้งค่าและการรวบรวม ฉันแน่ใจว่าการแก้จุดบกพร่องหวังได้ดีขึ้นในขณะที่คุณมีการใช้ GDB โดยตรงในอดีตที่ผ่านมาผ่านทางสถานีและ IDE มีการสนับสนุนมันไม่มี แต่เสียงเหมือนพวกเขาได้เริ่มต้นที่จะเพิ่มการสนับสนุนไปยังหุ่นยนต์ NDK สตูดิโอ คุณลองตัวอย่าง hellojni แล้วหรือยัง?
Matthew Sanders

NDK เป็นหนึ่งในสิ่งที่น่าขยะแขยงที่สุดในชีวิตคุณอาจพบว่า bgfx มีประโยชน์ในการอ้างอิงgithub.com/bkaradzic/bgfxมันไม่บางอย่างที่คุณคิดว่ามันมีแบ็กเอนด์เรนเดอร์หลายรายการ
JBeurer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.