สมมติว่าฉันมีเกมที่เขียนด้วย C ++ แต่ฉันต้องการเพิ่มฟังก์ชั่น modding หรือ scripting เข้าไป เราจะเพิ่มฟังก์ชันการเขียนสคริปต์ในเกมของคุณอย่างไร?
สมมติว่าฉันมีเกมที่เขียนด้วย C ++ แต่ฉันต้องการเพิ่มฟังก์ชั่น modding หรือ scripting เข้าไป เราจะเพิ่มฟังก์ชันการเขียนสคริปต์ในเกมของคุณอย่างไร?
คำตอบ:
ก่อนอื่นคุณควรตัดสินใจว่าสคริปต์ของคุณเป็นส่วนใด ทางเลือกหนึ่งคือการมีเกมที่เขียนสคริปต์อย่างสมบูรณ์ในขณะที่การดำเนินการแบ็กเอนด์เวลาที่สำคัญจะถูกเข้ารหัสใน C ++ ตรรกะของเกมทั้งหมดอยู่ในภาษาสคริปต์ นักออกแบบใช้แบ็กเอนด์เป็น API ที่เรียกว่าจากภาษาสคริปต์ระดับสูง ในสุดขีดอื่น ๆ คุณสามารถมีสถานที่เฉพาะไม่กี่แห่งที่ใช้สคริปต์เช่นส่วนติดต่อผู้ใช้หรือลำดับสคริปต์โดยส่วนใหญ่ของรหัสเกมยังคงอยู่ใน C ++ มีข้อดีสำหรับแต่ละวิธี (ความเร็วความยืดหยุ่นเวลาการรวบรวมขอบเขตของเกม ฯลฯ ) แต่คุณต้องตัดสินใจก่อน
เมื่อคุณรู้ว่าคุณต้องการใช้สคริปต์อย่างไรตอนนี้คุณต้องตัดสินใจว่าคุณจะใช้ภาษาสคริปต์ที่มีอยู่หรือภาษาเฉพาะโดเมนของคุณเองหรือไม่ วันนี้มีภาษาสคริปต์มากมายให้เลือกด้วยเป้าหมายการออกแบบที่แตกต่างกันและกลุ่มเป้าหมายดังนั้นฉันไม่แน่ใจว่ามันคุ้มค่าที่จะสร้างของคุณเองอีกต่อไป หากคุณตัดสินใจที่จะใช้งานของคุณเองนี่คือแหล่งข้อมูล:
Luaเป็นภาษาสคริปต์น้ำหนักเบายอดนิยมและง่ายต่อการฝัง มันใช้กองสำหรับการสื่อสารระหว่างโฮสต์และภาษาฝังตัวและมันก็ใช้ประสบความสำเร็จในเกมมืออาชีพมาก Sol2ลดความซับซ้อนของกระบวนการผูกพัน Lua และ C ++ หากคุณไม่ชอบไวยากรณ์ของ Lua Moonscriptเป็นภาษาที่คอมไพล์ไปที่ Lua และเพิ่มฟีเจอร์ที่น่าสนใจมากมาย
ตัวเลือกอื่น ๆ ได้แก่AngelCodeซึ่งช่วยให้คุณสามารถเรียกใช้ฟังก์ชัน C และ C ++ ได้โดยตรง งูหลามและทับทิมเป็นบิตที่ซับซ้อนมากขึ้นฝัง แต่ที่น่าพอใจมากในการเขียนโปรแกรมใน. หากคุณต้องการฝังงูใหญ่แล้วจะดูที่Boost.Python อีกแนวคิดหนึ่งคือการฝัง JavaScript เพื่อใช้ประโยชน์จากเครื่องมือสร้างสคริปต์อย่างรวดเร็วที่พัฒนาขึ้นสำหรับเบราว์เซอร์ (ดูV8และSpiderMonkey )
ผมเขียนโพสต์เกี่ยวกับการฝังสคริปต์ GameMonkey ที่จะเล่นเกมโดยใช้ DragonFire SDK ที่นี่
โดยพื้นฐานแล้วแนวคิดคือการเปิดเผยฟังก์ชั่น C \ C ++ ให้กับภาษาสคริปต์ที่คุณเลือกและใช้งานจากสคริปต์ของคุณ ในบทช่วยสอนฉันได้เปิดฟังก์ชั่น 2 อย่างจาก DragonFire SDK เมื่อเริ่มเกมฉันเรียกใช้ฟังก์ชัน onStart จากสคริปต์และในการอัปเดตฉันเรียกใช้ฟังก์ชัน onTimer จากสคริปต์
หวังว่าจะช่วย!