ในโครงการปัจจุบันของฉันสคริปต์ Lua ถูกเรียกโดยฟังก์ชัน C ++ ที่ฝั่งเซิร์ฟเวอร์ หลังจากนั้นสคริปต์จะเรียกฟังก์ชัน C ++ อีกครั้งที่ยังอยู่ในโซลูชันนั้น ทำไมเราควรทำสิ่งต่าง ๆ และไม่เรียกใช้ฟังก์ชัน C ++ โดยตรง สถานการณ์ใดบ้างที่จำเป็นต้องใช้สคริปต์
ในโครงการปัจจุบันของฉันสคริปต์ Lua ถูกเรียกโดยฟังก์ชัน C ++ ที่ฝั่งเซิร์ฟเวอร์ หลังจากนั้นสคริปต์จะเรียกฟังก์ชัน C ++ อีกครั้งที่ยังอยู่ในโซลูชันนั้น ทำไมเราควรทำสิ่งต่าง ๆ และไม่เรียกใช้ฟังก์ชัน C ++ โดยตรง สถานการณ์ใดบ้างที่จำเป็นต้องใช้สคริปต์
คำตอบ:
มักจะรวบรวมสคริปต์ในเวลาทำงานในขณะที่ภาษาโฮสต์จะถูกรวบรวมในเวลารวบรวม ซึ่งหมายความว่าเราไม่จำเป็นต้องคอมไพล์ใหม่หากสคริปต์เปลี่ยน การคอมไพล์เกมใหม่เต็มรูปแบบอาจใช้เวลาหลายนาทีถึงหลายชั่วโมง
โดยปกติแล้วรหัสสำคัญหรือรหัสแบ็กเอนด์จะไม่ถูกสคริปต์ รหัสนี้ควรเรียกใช้อย่างรวดเร็วและบ่อยครั้งที่การจัดการหน่วยความจำมีความสำคัญ
ในเกมตรรกะของเกมและการกำหนดค่าจะมีอยู่ในไฟล์สคริปต์ สคริปต์เหล่านี้สามารถอัปเดตได้อย่างง่ายดายโดยผู้ที่ไม่ใช่โปรแกรมเมอร์ (เช่นนักออกแบบ) เพื่อปรับแต่งการเล่นเกม ภาษาสคริปต์นั้นง่ายและกระทำในลักษณะการให้อภัยเพื่อจุดประสงค์นั้น
มักจะเป็นภาษาสคริปต์ยังใช้ในการทำสคริปต์ในเวลาจริง สิ่งนี้มีประโยชน์ในการปรับแต่งองค์ประกอบการเล่นเกมหรือแม้แต่การดีบั๊ก เกมส่วนใหญ่มีคอนโซลสำหรับจุดประสงค์นี้
เป็นไปได้มากที่คุณสร้างเกมโดยใช้เอ็นจิ้นเกมที่มีอยู่เพียงแค่เขียนสคริปต์ ชั้นเครื่องยนต์เกมอย่างเต็มที่จึงแยกจากชั้นเกมตรรกะ โดยทั่วไปเครื่องยนต์ที่ทันสมัยสามารถใช้สร้างเกม FPS หรือ RTS ได้อย่างง่ายดายเช่นนี้ แต่มันเป็นไปไม่ได้สำหรับทุกประเภท MMO อาจต้องการเครื่องยนต์ประเภทอื่น
ดังนั้นบรรทัดล่างคือแยกตัว ประโยชน์ที่ระบุไว้ข้างต้นมักมีน้ำหนักมากกว่างานพิเศษในการสร้างหรือรวมภาษาสคริปต์
คุณถามคำถามผิด คำถามจริงฉันคิดว่าทำไมเราถึงใช้ภาษาที่ "ไม่ใช่สคริปต์" เช่น C, C ++, Java และอื่น ๆ และคำตอบคือเหตุผลหนึ่ง: ประสิทธิภาพ (และอาจเป็นความเฉื่อย แต่แรงเฉื่อยนั้นอยู่ที่นั่นเพราะประสิทธิภาพและทุกคนที่สามารถเขียน C / C ++ / Java ได้ดีสามารถเขียน Ruby / Python / Lua / JavaScript ได้อย่างน้อย)
เราใช้ภาษา "การเขียนสคริปต์" (ซึ่งจริงๆแล้วหมายถึงระดับสูงมากเก็บขยะและรูปแบบของการพิมพ์ที่หลวมและการรวบรวมแบบไดนามิก) เพราะพวกเขามักจะเป็นภาษาที่ง่ายขึ้นสำหรับทุกคน - รวมโปรแกรมเมอร์ - เพื่อเขียนโค้ดสิ่งที่โง่เช่นการจำให้เป็นอิสระหลังจากที่คุณ malloc หรือตรวจสอบให้แน่ใจว่ารหัสของคุณปลอดภัยยกเว้นหรือจำเพื่อให้ destructors ทั้งหมดของคุณเป็นเสมือน หากคอมพิวเตอร์ของเรารวดเร็วอย่างไม่ จำกัด เราจะใช้ภาษา "สคริปต์" สำหรับทุกสิ่ง
การเปลี่ยนแปลงสคริปต์ง่ายต่อการปรับใช้ ตัวอย่างเช่นคุณสามารถเก็บสคริปต์ในฐานข้อมูลซึ่งหมายความว่าแทนที่จะเป็นไบนารีการปรับใช้ซ้ำแบบเต็มและเริ่มบริการใหม่คุณเพียงแค่ใช้คำสั่ง SQL UPDATE เดียวอาจตามด้วยสัญญาณไปยังบริการที่ทำงานอยู่เพื่อโหลดสคริปต์อีกครั้ง
นอกจากนี้ภาษาสคริปต์มักจะเข้าใจง่ายและตั้งโปรแกรมได้ง่ายดังนั้นคุณไม่จำเป็นต้องใช้ 'hardcore' (คนที่เกี่ยวข้องกับ Memory Management / Pointers และ cpu-level optimization) สำหรับโค้ดส่วนใหญ่ (ถ้าเป็น RPG ขนาดใหญ่ สคริปต์สำหรับ AI, Spells, Item Effects และโลกมักจะใหญ่กว่ารหัสเครื่องยนต์) ภาษาสคริปต์ให้ความสำคัญกับ 'สิ่ง' มากกว่า 'วิธี' เนื่องจากการรวบรวมขยะ (ในกรณีของ Lua) และระดับที่สูงขึ้นของสิ่งที่เป็นนามธรรม
สถานการณ์หนึ่งที่ชาวสคริปส์มีประโยชน์คือเมื่อเราต้องการให้เครื่องยนต์ของเราสามารถขยายได้โดยปลั๊กอิน / ส่วนเสริม ส่วนขยายเหล่านี้สร้างขึ้นในหลาย ๆ กรณีโดยผู้ที่ไม่ใช่มืออาชีพ (เช่นนักเล่นเกมขั้นสูงและผู้ที่ชื่นชอบ) สคริปต์มีความปลอดภัยและง่ายขึ้นสำหรับจุดประสงค์นี้ เมื่อใช้สคริปต์พวกเขาไม่จำเป็นต้องใช้คอมไพเลอร์และไม่จำเป็นต้องระวังพอยน์เตอร์ ...
ตัวอย่างที่ดีของเกมนี้คือเกม World of Warcraft มันมีหลายพัน addons ที่สร้างขึ้นโดยชุมชน ส่วนเสริมเหล่านี้เขียนขึ้นโดยใช้ LUA + XML