Lua新手:备用(Knuth)伪随机函数性能如何?
2017-5-23 11:57:21
收藏:0
阅读:154
评论:1
我正在为iOS和OSX开发一个Lua的魔幻风格游戏。我对Lua还比较陌生,却发现在我的平台上,math.random 函数并非真正的随机。我已经设置了通过函数产生随机数的调用:
function rollD(max)
return math.random(max)
end
我在这篇文章中找到了一个非常好的答案,我认为它可以解决我的问题(对于魔幻游戏来说,每次游戏都不同是相当关键的)。但是,为了使以下修改后的函数:
function rollD(max)
return srandom(seedobj,1,max)
end
起作用,我不得不让来自 Donati 的 Knuth 适应方法的:
local seedobj = { seed = -232343 }
不再是本地的,然后实际上修改为使用 (os.time() * -1)。到目前为止,这确实完美地发挥作用,我的(非常简陋的)魔幻游戏正在完美地生成随机的敌人和地牢。但当事情按计划进行时,我仍有些担忧……
如果大量调用了 srandom(每级别大约会有一千次以上的调用),那么使 seedobj 成为全局变量,我会有一些性能损失吗?我认为,因为它嵌套在表中,所以种子是一个引用,我担心了徒劳。但是,是否有一种方法可以修改此函数,以便我可以更有效地调用它?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在 Lua 中访问全局变量就像访问表字段一样。如果
seedobj是全局变量,则以下代码在 Lua 5.2 中等价于:function rollD(max) return srandom(_ENV.seedobj,1,max) end在 Lua 5.1 中等价于(大致上):
function rollD(max) return srandom(_G.seedobj,1,max) end其中
_ENV是当前环境表的变量,_G是全局变量的变量。因此,每次调用
rollD都会产生一个小的性能损失,因为这是间接访问,比起局部变量,会慢一些。一般来说,这种损失对于rollD被调用时执行的其他操作的复杂性影响很大或者很小。在您的特定情况下,这种损失很难被注意到,因为
srandom实现已经执行了更多的密集计算(其中包括一些表访问)。