ข้อดีและข้อเสียของ Lua vs. Python เป็นภาษาสคริปต์สำหรับแพลตฟอร์ม XNA / C # คืออะไร [ปิด]


9

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

ในขณะที่ฉันส่วนใหญ่เป็น. NET ผู้ชายฉันจะใช้ XNA / C # สำหรับเกมเอง สำหรับการเขียนสคริปต์ฉันคิดว่าจะไปกับ Python หรือ Lua ฉันเคยมีประสบการณ์กับงูหลามมาก่อนและไม่มีอะไรขัดกับภาษาเลย Lua ในทางกลับกันเกือบจะใหม่ทั้งหมดสำหรับฉันนอกเหนือจาก World of Warcraft เล็กน้อยบางส่วนยังมีการดัดแปลงเพิ่มเติมที่ฉันทำที่นี่และที่นั่นและมันก็ดูมีแนวโน้ม ดังนั้นนี่คือคำถามของฉัน:

ข้อดีและข้อเสียของ Lua vs. Python เป็นภาษาสคริปต์สำหรับแพลตฟอร์ม XNA / C # คืออะไร

เป็นหนึ่งในนั้นใช้งานง่ายขึ้นด้วย XNA / C #? มีหนึ่งในนั้นมีข้อดีหรือข้อเสียบางประการเมื่อใช้กับ XNA / C # ทำไมคุณถึงแนะนำอีกอันสำหรับ XNA / C #


4
ฉันรู้ว่าคุณไม่ได้ขอทางเลือกอื่น แต่ในกรณีที่คุณไม่ทราบ C # ก็เป็นภาษาสคริปต์ที่ถูกต้องและเมื่อคุณใช้ C # การบำรุงรักษาก็ต่ำมาก
William Mariager

2
ทำไมคุณถึงต้องใช้ภาษาสคริปต์? คุณคาดหวังว่าจะได้ผลกำไรใด
ปีเตอร์Ølsted

2
ทั้งคู่เป็นที่นิยมใช้อย่างมืออาชีพและสามารถทำสคริปต์ได้อย่างแน่นอน เป็นเรื่องของรสนิยมเพียง 99% ของแอปพลิเคชัน Python มีไลบรารี่มาตรฐานที่ดีกว่าและในความเห็นของฉันเป็นภาษาที่ใช้งานง่ายกว่า
Cloudanger

1
ตามแนวของ 'คุณได้พิจารณาหรือไม่?' คุณคิดว่าBoo แล้วหรือยัง? มันถูกออกแบบมาสำหรับการเขียนสคริปต์แทนที่จะเป็นภาษาสคริปต์ คล้ายกับ IronPython มีผู้ช่วยในการโฮสต์ (และสามารถตีความเป้าหมายเช่น XBox) ได้
Jonathan Dickinson

1
นอกจากนี้อย่าละเลยการเขียนสคริปต์ภาพ (คล้ายกับบรรณาธิการ Staredit - Starcraft 1)
Jonathan Dickinson

คำตอบ:


11

ฉันไม่สามารถเปรียบเทียบทั้งสองได้เนื่องจากฉันมีเพียงประสบการณ์การฝัง IronPython ในเกม C # จนถึงตอนนี้ นี่คือสิ่งที่ฉันชอบเกี่ยวกับมันแม้ว่า:

1) ง่ายมาก! ดาวน์โหลด IronPython DLLs เพิ่มการอ้างอิงในโครงการ

 using IronPython.Hosting;

 var engine = Python.CreateEngine();
 var product = engine.Execute<System.Numerics.BigInteger>(@"
 print ' '.join(['hello', 'from', 'ironpython!'])
 a = 123456789
 b = 10
 a**b
 ");
 Console.WriteLine("a**b={0}", product);

2) ดังที่คุณเห็นจากตัวอย่างด้านบน IronPython จะแปลงคลาส BCL ให้เป็นจริง ผลลัพธ์ของสคริปต์คือ System.Numerics.BigInteger แทนที่จะเป็น PyObject

3) dynamicคำสำคัญใน C # ถูกสร้างขึ้นมาสำหรับสถานการณ์ interop ที่คุณไม่มีประเภทคงที่:

    dynamic example = engine.Execute(@"
class Example(object):
  def __init__(self):
    self.breakfast = ['ham','spam','eggs']
    self.lunch = 'BRAIINNNZ'
Example() # return an example");

    foreach(string item in example.breakfast)
        Console.WriteLine(item);
    Console.WriteLine(example.lunch);

+1 สำหรับตัวอย่างที่ดีซึ่งแสดงว่ามันง่ายแค่ไหนที่จะได้เหล็กงูหลามที่เหลือ ... แม้ว่ามันจะไม่ใช่ OP ก็ขอ ;-)
tobsen

0

IronPython และ C # ทำงานร่วมกันได้ดี IronPython สามารถเพิ่มใน C # เพื่อเพิ่มประสิทธิภาพ ดังนั้นหากเกมการเขียนของคุณ Python จะโทรภายใน C # จะได้รับการพิจารณาเป็นพิเศษ หลามเองไม่สามารถใช้ประโยชน์จาก XNA ได้ แต่สามารถใช้ประโยชน์จาก Directx ได้บางอย่าง C # ไม่สามารถทำได้โดยตรง


1
FWIW, Python ไม่สามารถใช้ DirectX "โดยตรง" ได้เช่นกัน - มันโต้ตอบกับมันผ่านทาง wrappers โดยดูจากข้อเท็จจริงที่ว่า D3D เป็น C / COM API นี่คือวิธีที่คุณสามารถเข้าถึง DirectX จาก C # ได้เช่นกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.