【问题标题】:What language features are needed for game scripting?游戏脚本需要哪些语言功能?
【发布时间】:2010-10-12 22:03:28
【问题描述】:

我正在研究设计一种游戏脚本语言,并且想知道游戏行业的员工认为哪些是优秀游戏脚本语言的基本项目/属性。这包括以下内容:

  • 静态与动态类型
  • 应该针对谁: 程序员还是设计师?
  • 语法(必须看起来像 C 吗?)
  • 应该有多高? (例如 C 与 Lisp -- 或命令式 vs 函数式)
  • 它必须能够做什么。有多快 需要吗?

另外,我从一些消息来源听说脚本往往非常简单,因为它们是由设计师而不是程序员编写的。是这样吗?

【问题讨论】:

    标签: scripting language-features language-design


    【解决方案1】:

    这部分取决于哪个部门将负责编写大部分脚本。例如,如果关卡设计师正在编写大部分脚本,那么最好的语言类型将是更接近自然语言的语言,不需要陡峭的学习曲线。关卡设计师不一定想学习像 C/C++ 这样复杂的语法来播放声音。

    伪语言可能看起来像这样(TES 构造集脚本是这样的):

    script MagicCaveDoorScript
        on UseAction
            if HasItem magicDoorKey
                PlaySound2D magicDoorOpen
                ChangeArea magicCave01
            else
                Message "You need the magic door key to enter..."
            end
        end
    end
    

    但是,如果程序员是编写大量脚本的人,那么使用 Lua 或 Squirrel 等更复杂的语言来处理类、对象等可能会更加灵活和强大。

    创建“更简单”的脚本语言的一个好处是,实现并不像更难的语言那么复杂,并且还允许您轻松开发工具以通过 GUI 创建脚本,例如从列表中选择要播放的声音,要附加的怪物物品列表等。

    【讨论】:

      【解决方案2】:

      您似乎在问一个非常笼统的问题(如果您不知道脚本语言必须做什么,或者它需要多快)并期待具体的答案。

      脚本语言的主要原因是允许人们在不破解源代码的情况下更改游戏。让我们一起去吧。

      因此,它应该更多地针对设计师,因为他们不会破解源代码,而程序员会。它需要足够快才能正常运行游戏。它需要足够强大,让设计师可以放入他们将要放入的任何东西。(是的,这些都是模糊的答案,但你没有提供足够的信息来更具体。)

      因此,请忘记主要对程序员有用的功能,例如任何特定的语法模型或静态类型。设计人员不会对 C 语法一无所知,也不想担心静态类型或内存管理。

      使用已经建立的语言有一些真正的优势。设计师可能对它有一些经验,它已经记录在案,并且已经为您完成了很多困难的事情。这包括语言设计:程序员不一定善于看到脚本语言的优点。

      这暗示了 Lua 或 Python 之类的东西。

      【讨论】:

      • 我完全同意这一点 - 对于脚本需要做什么,没有也不可能是一个“正确”的答案,因为它取决于应用程序和团队。
      【解决方案3】:

      想了解一些实际用于在游戏中编写脚本的语言,例如 PythonLua,以获取一些想法吗?

      两者恰好都是动态类型的,而且在语法方面,Python 与 C 非常不相似,Lua 与 C 也不是很相似。

      可能将它们用于游戏脚本的原因是易于将该语言嵌入为脚本引擎(如果有的话)。如果要在设计语言时考虑到设计师,那么可能必须更改对语言的要求以适应设计师的需求,而不是让语言更容易集成到游戏中。

      【讨论】:

        【解决方案4】:

        我理想的游戏脚本语言应该具有类似 Python 的语法,并且可以像 LUA 一样轻松嵌入到其他语言中。
        此外,它应该能够嵌入到 XNA 中,目前(并且可能永远)缺少 LuaInterface 和嵌入式 IronPython 所依赖的反射特性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-10
          • 1970-01-01
          • 2011-10-07
          • 2011-11-18
          • 2013-06-17
          • 2015-12-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多