คุณจะเพิ่มภาษาสคริปต์ลงในเกมได้อย่างไร


25

สมมติว่าฉันมีเกมที่เขียนด้วย C ++ แต่ฉันต้องการเพิ่มฟังก์ชั่น modding หรือ scripting เข้าไป เราจะเพิ่มฟังก์ชันการเขียนสคริปต์ในเกมของคุณอย่างไร?


ภาษาที่ได้รับความนิยมมากที่สุด:ดูLua (ภาษาโปรแกรม)และLua (Programming langugae) - C API ตัวอย่าง: IBM มีบทความที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้: การฝัง LUA
Tamara Wijsman

ขั้นตอนที่แน่นอนขึ้นอยู่กับภาษาที่คุณต้องการเพิ่มอย่างมาก ดูgamedev.stackexchange.com/questions/11/…
tenpn

คำตอบ:


27

ก่อนอื่นคุณควรตัดสินใจว่าสคริปต์ของคุณเป็นส่วนใด ทางเลือกหนึ่งคือการมีเกมที่เขียนสคริปต์อย่างสมบูรณ์ในขณะที่การดำเนินการแบ็กเอนด์เวลาที่สำคัญจะถูกเข้ารหัสใน C ++ ตรรกะของเกมทั้งหมดอยู่ในภาษาสคริปต์ นักออกแบบใช้แบ็กเอนด์เป็น API ที่เรียกว่าจากภาษาสคริปต์ระดับสูง ในสุดขีดอื่น ๆ คุณสามารถมีสถานที่เฉพาะไม่กี่แห่งที่ใช้สคริปต์เช่นส่วนติดต่อผู้ใช้หรือลำดับสคริปต์โดยส่วนใหญ่ของรหัสเกมยังคงอยู่ใน C ++ มีข้อดีสำหรับแต่ละวิธี (ความเร็วความยืดหยุ่นเวลาการรวบรวมขอบเขตของเกม ฯลฯ ) แต่คุณต้องตัดสินใจก่อน

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

Luaเป็นภาษาสคริปต์น้ำหนักเบายอดนิยมและง่ายต่อการฝัง มันใช้กองสำหรับการสื่อสารระหว่างโฮสต์และภาษาฝังตัวและมันก็ใช้ประสบความสำเร็จในเกมมืออาชีพมาก Sol2ลดความซับซ้อนของกระบวนการผูกพัน Lua และ C ++ หากคุณไม่ชอบไวยากรณ์ของ Lua Moonscriptเป็นภาษาที่คอมไพล์ไปที่ Lua และเพิ่มฟีเจอร์ที่น่าสนใจมากมาย

ตัวเลือกอื่น ๆ ได้แก่AngelCodeซึ่งช่วยให้คุณสามารถเรียกใช้ฟังก์ชัน C และ C ++ ได้โดยตรง งูหลามและทับทิมเป็นบิตที่ซับซ้อนมากขึ้นฝัง แต่ที่น่าพอใจมากในการเขียนโปรแกรมใน. หากคุณต้องการฝังงูใหญ่แล้วจะดูที่Boost.Python อีกแนวคิดหนึ่งคือการฝัง JavaScript เพื่อใช้ประโยชน์จากเครื่องมือสร้างสคริปต์อย่างรวดเร็วที่พัฒนาขึ้นสำหรับเบราว์เซอร์ (ดูV8และSpiderMonkey )


2
ฉันใช้ภาษาสคริปต์สำหรับโครงการเกมปัจจุบันของฉันและข้อได้เปรียบหลักคือการควบคุมภาษาดั้งเดิมอย่างสมบูรณ์ โซลูชันการสร้างสคริปต์ล่วงหน้าสร้างขึ้นโดยทั่วไปและคุณอาจไม่ต้องการคุณสมบัติทั้งหมดที่มีให้ คุณไม่ควรคิดถึงการใช้ภาษาของคุณเองจนกว่าคุณจะแน่ใจว่าคุณสามารถทำสิ่งที่ดีกว่าสำหรับเกมของคุณได้มากกว่าโซลูชันที่มีอยู่
Jon Purdy

โดยส่วนตัวแล้วฉันชอบGuileแต่ก็มีการรวมที่ยอดเยี่ยมกับ C ปัญหาเดียวคือความเร็ว แต่ด้วยการเปิดตัว 2.0 ในอีกไม่กี่เดือนข้างหน้าซึ่งควรปรับปรุงด้วย
Joe D

คำตอบที่ยอดเยี่ยม ย่อหน้าแรกสามารถสรุปได้ว่า "นักพัฒนาเกมสร้าง API ซึ่งใช้สำหรับเนื้อหา"
ashes999

คำทั่วไปสำหรับภาษาที่กำหนดเอง (สคริปต์หรืออย่างอื่น) คือ DSL ซึ่งอาจช่วยให้ทราบว่าคุณต้องการอ่านหรือไม่
Patrick Hughes

2

ผมเขียนโพสต์เกี่ยวกับการฝังสคริปต์ GameMonkey ที่จะเล่นเกมโดยใช้ DragonFire SDK ที่นี่

โดยพื้นฐานแล้วแนวคิดคือการเปิดเผยฟังก์ชั่น C \ C ++ ให้กับภาษาสคริปต์ที่คุณเลือกและใช้งานจากสคริปต์ของคุณ ในบทช่วยสอนฉันได้เปิดฟังก์ชั่น 2 อย่างจาก DragonFire SDK เมื่อเริ่มเกมฉันเรียกใช้ฟังก์ชัน onStart จากสคริปต์และในการอัปเดตฉันเรียกใช้ฟังก์ชัน onTimer จากสคริปต์

หวังว่าจะช่วย!


1
ฉันได้อัปโหลดตัวอย่างวิดีโอที่นี่ด้วย: bit.ly/dnCkar
astk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.