调整和设置-运行时变量修改和持久性


19

大多数公司都有编辑器或变量控制系统,用于调整游戏中的内容,但是是否有任何中间件解决方案来解决此问题?我过去曾写过两个这样的系统,并使用过五个(也许是六个)不同的系统,但是没有一个可用。

这些本地解决方案中的每一个都有问题,从必须继续查找值到无法保存变量的当前状态不等。

是否有成熟的Config / Runtime变量控制库/应用程序?

我通常使用C ++编写代码,但我认为成熟的设置/变量编辑器可能基于套接字(因此在某种程度上与语言无关),因为除Nintendo之外,所有当前的开发硬件都提供了一种与服务器通信的机制。代码的实现也必须非常简单(我确实喜欢Oskar共享的hot_var / TweakableConstants文章,但它不是一个包)

Answers:


8

我喜欢Noel在他的博客上提出的建议。甲远程登录基于变量调教。通过使用telnet,他可以使用任何telnet客户端来编辑变量。后来他们围绕协议建立了一个GUI。似乎很简单,它可能不值得使用中间件库,但是查看他的代码可能会有用。

但是,我不同意他的反卢阿情绪。远程Lua控制台似乎很棒。


它们用于在摩托车的好办法变量的telnet太:blogs.msdn.com/b/shawnhar/archive/2009/05/01/...
Kylotan

3
为什么要Telnet?HTTP / HTML,伙计!HTTP是一个非常简单的协议,可以轻松地嵌入到游戏中-我之前已经做过,它只有一千行代码。
ZorbaTHut 2010年

3
我要说的是Telnet可以很好地完成这项工作,并且复杂程度要低得多。您可以用100行代码而不是1000行来完成。它还允许推送更新,而不必轮询和拉动它们。但是,如果您在游戏中出于其他任何目的需要HTTP,我也同意在这里使用它也是值得的。
Kylotan's

5

可调常数的想法也许符合您的需求。实际上它是如此有用,以至于您认为您将需要一个复杂的解决方案来具有有效的运行时变量控制,但是实际上实现起来太简单了。对该技术的原始讨论也很有趣。

例:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

H宏展开类似HotValue(x, __FILE__, __LINE__, __COUNTER__)。这会将值注册到某个全局注册表。然后有一个RefreshHotValues()您定期调用的函数。该函数在注册表中查找每个条目,解析特定的源文件并重新加载热值。

当您修改实际的源代码时,您就可以在其中保持持久性。

显然,这并不是在H()没有对每个帧都进行评估的情况下无法解决的,但是有解决此问题的方法,如此处所述

您可能会将此想法扩展为基于套接字的解决方案。调用HotValue()每个帧可能会有相当大的性能开销,但是您可以很容易地编译出宏,而用常量完全替换它,这不是问题。


2
@Kylotan:您错过了重点。您正在修改实际的源代码,它将在运行时进行解析。持久性是通过修改后的源实现的。
Oskar N.

是的,我以某种方式错过了这篇文章。我将删除我的评论并重新阅读!
Kylotan 2010年

3
我可能只是我一个人,但是这种技术让人觉得...很讨厌。我认为这是因为我花了很多时间讨厌魔术数字,而这仅适用于魔术数字。我宁愿看到纯色是配置文件或脚本文件的一部分。魔术具有热加载资源的能力。
deft_code 2010年

@caspin:您可以使用普通变量,而是使用have H(int, myvar, 5)和当文件更改时替换myvar内存中的。参见mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.

1

AntTweakBar对于您想做的事情确实很有用,但是,在大多数情况下,您希望使用一些宏或类似方法在发布时“编译掉”的方法。



0

设置管理似乎是每款游戏都需要从头做起的事情之一,这可能是因为它相对简单,而且所需设置类型的可变性也很高。假设您有一个不错的存储后端设置(SQL /任何版本),您就可以在一两天内为设置管理编写一个健壮的解决方案,因此中间件解决方案似乎并没有真正的业务需求。我认为,在大多数情况下,将其用作您存储球员信息的最佳方式。


1
这与设置信息无关,而与调试运行时变量有关,以便进行调试或玩游戏。

为了调试和游戏目的,许多类型的运行时变量都有意义地存储在某种持久性后端中。这样可以在部署时在整个系统上进行更改。SQL只是后端的一个示例,您可以将信息修补到磁盘上的文件或任何其他方法中。
Ben Zeigler 2010年

1
问题是要让他们实时更改。这可能涉及在数据库上设置某种触发器,以及游戏中可以处理该触发器并在游戏继续运行时异步重新读取值的某些东西。并非不可克服,但也不是非常简单。
Kylotan 2010年

管理DB触发器的代码将是Richard正在寻找的代码,并且是有趣/可重用的部分。将常量移动到数据库而不是文件系统或其他工具不会使代码神奇地出现,而可能只会使其变得更加复杂。

-1

实际上,我最近一直在考虑这样的事情,我认为这将是一个不错的选择 Android应用程序与小库结合使用的任何语言选择。该应用程序将是一组可自定义的按钮,切换,下拉菜单等(您需要的任何小部件),并且它将通过WLAN(或USB,如果您希望使事情复杂化)将动作发送到库中。该库会从游戏中衍生出一个单独的线程,并且会知道Android手机上的哪个控件对应于游戏中的哪些变量(您可以在启动代码中进行设置),并且可以连接到Android应用。

然后,搞乱游戏就像触摸手机上的东西一样容易。您甚至可以在电话上使用一些文本框来显示游戏中的实时变量值,或者可以将库转发stdinstderr移至电话上的滚动文本区域。选项是无限的!

唯一真正关心的是速度。如果速度和反应时间至关重要,那么您只需通过USB挂断电话,adb(Android调试器)就可以通过USB将端口转发到电话。但是,否则,WLAN只会产生很小的延迟,我认为这对于此目的是可以接受的。

我认为上面没有写过这样的东西,但是我一直在强烈考虑编写它。(我对自己的游戏的开发还远远不够,需要它)

当然,您当中那些使用Apple的用户可能也可以对您的iDevices做同样的事情。我个人认为iOS开发要比Android开发困难几个数量级,当然上述应用程序可以轻松发布到Android市场以方便分发,而Apple可能不允许开发人员工具进入应用程序商店,所以我觉得Android平台更适合此工具。


在办公室环境中,这将是很好的选择。走过去与一位艺术家交谈,然后与相邻的设计师的跑步游戏联系并开始摆弄,而他正试图建立一些相遇……
dash-tom-bang 2010年

1
我不明白将它放在手机上而不是实际用于开发的计算机上的好处。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.