游戏NPC多动作lua脚本设计

发布于 2024-10-14 15:48:38 字数 573 浏览 2 评论 0原文

我需要将可编写脚本的 NPC 放入我当前的游戏项目中。 该项目本身是用C++语言开发的。 我将使用 Luabind 来绑定 lua 和 c++。

当某些 NPC 点击或计时器被激活时,我需要调用 NPC 函数。 目前我在2个NPC脚本设计之间徘徊。

  1. 使用一种 npcname_action 来区分每个 NPC。
    给每个不同的 NPC 命名有点麻烦。
    我仍在思考如何在我的项目中实现这一点。
    示例:

    HotelBellboy12_Click() { .. }  
    HotelBellboy12_TimerAction() { .. }
    
  2. 使用函数名称。
    每个npc都有自己的lua文件。
    我正在考虑将脚本加载到内存中,并在需要时使用 luaL_loadbuffer 将其加载到 luaState
    示例:

    OnClick() { .. }
    OnTimerAction() { .. }
    

哪一个更好,为什么?

I need to put scriptable NPC in my currect game project.
The project itself is developed in C++ language.
I will using Luabind to bind lua and c++.

I need to call NPC function when certain NPC clicked or timer to do something is activated.
Currently I stuck between 2 NPC script design.

  1. Using a kind of npcname_action to differentiate every NPC.
    This is kind of troublesome to give name to every different NPC.
    I'm still thinking how to implement this in my project.
    Example:

    HotelBellboy12_Click() { .. }  
    HotelBellboy12_TimerAction() { .. }
    
  2. Using name of function.
    Every npc have it own lua file.
    I'm thinking to load script into memory and when needed will be loaded into luaState using luaL_loadbuffer
    Example:

    OnClick() { .. }
    OnTimerAction() { .. }
    

Which one is better and why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小帐篷 2024-10-21 15:48:38

您可以使用其他设计。

利用表键和值可以是任何类型的事实。

假设 npc 是一个包含所有 NPC 的表。它的键是 NPC 的名字,它的值是另一个表。其他表键是操作,其值是该操作的函数。
所以,如果你想让鲍勃在点击时跳跃,并让爱丽丝在计时器后哭泣,只需执行以下操作:

npc.bob.click = function () jump() end
npc.alice.timer = function () cry() end

You could use another design.

Take advantage of the fact that table keys and values can be any type.

Let's say npc is a table containing all NPC's. Its keys are NPC' names and its values are another table. This other table keys are the actions, and its values are the function for this actions.
So, if you want bob to jump when clicked on, and alice to cry after a timer, simply do :

npc.bob.click = function () jump() end
npc.alice.timer = function () cry() end
等你爱我 2024-10-21 15:48:38

我以前做过类似的事情,并且使用了类似于你的#2选项的东西。当地图加载时,我加载一个包含所有 NPC 数据的配置 Lua 文件;其中是NPC使用的脚本文件的名称。

当我需要在游戏中加载 NPC 时,我编译 Lua 文件。 NPC 可以使用“模型”NPC 类型来规定 NPC 配置中指定的大多数常见行为(例如商人类型或平民类型)。这些模型类型提供所有基本功能,例如单击时提供交易窗口。特定 NPC 使用 OnClick() 等函数来覆盖其模型并提供自定义处理程序。

这对我来说效果很好,尽管如果你的游戏变得很大,最终会产生大量的脚本。

I've done something like this before and I used something similar to your #2 option. When the map loads I load a configuration Lua file containing all the NPC data; among that is the name of the script file used for the NPC.

When I need to load the NPC in the game I compile the Lua file. NPC's can use a 'model' NPC type to dictate most of the common behavior (for example a Merchant type or a Commoner type) which is specified in the NPC configuration. These model types provide all the basic functionality such as providing a trade window when clicked. The specific NPC's use functions like OnClick() to override their model and provide custom handlers.

This worked pretty well for me, although it ends up being a large volume of scripts if your game gets large.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文