我正在尝试为视频游戏制作随机数,但是不断遇到游戏崩溃,循环播放所有视频而无所事事,或者只是反复选择一个选项(取决于我添加的内容和位置)的问题。并删除内容)
function main()
functable = {
pedspawner(),
justdie(),
haveacar(),
locking(),
}
repeat
math.random(functable)
Wait(30000)
until
PedIsDead(player)
end
这基本上是我目前正在做的事情,显然非常不正确,但对我还能做些什么很感兴趣。我尝试为math.random添加更多的args,使其更像{pedspawner}等。
任何尝试解决这种怪异的尝试都会受到赞赏,我可以做的其他所有事情,仅仅是我的“使函数执行随机化”,我遇到了麻烦:)
注意,我正在使用Lua 5.3.5。
[首先,请记住通过调用math.randomseed
来植入Lua的随机数生成器。提供给该函数的参数通常是调用os.time
的结果。
math.randomseed(os.time())
第二,就语法而言,您应该使用关键字
local
,尤其是对于函数内部的变量。]>就像您所做的一样,我通常在Lua中编写C样式的
main
函数。我不知道您是否需要访问脚本中的命令行参数,但是argc
是参数的数量,argv
是提供的所有参数的表。
local function main(argc, argv) -- FIXME: function body return 0 end main(#arg, arg)
关于功能表,在每个元素后删除
()
。 Lua具有一流的功能,这意味着它们被视为变量。在functable
或更高版本中,main
的声明将正确编写为:local functable = { pedspawner, justdie, haveacar, locking }
Lua,与C / C ++不同,它没有常量。但是,如果您希望
functable
的内容保持不变,建议您在main
函数外部声明它,并将其名称大写为FUNCTABLE
。为了生成一个介于1和
functable
长度之间的数字,首先需要检索表的长度。您在注释中提到长度运算符#
给您带来了问题,因此您可以改用函数rawlen
。
local len = rawlen(functable)
使用所有这些片段,我看到您的脚本看起来像这样:
-- Functions PedIsDead, Wait, and those within FUNCTABLE are defined above or -- in modules that have been included. local FUNCTABLE = { pedspawner, justdie, haveacar, locking } local function main(argc, argv) math.randomseed(os.time()) -- As long as you neither add members nor subtract elements from FUNCTABLE, you -- need only retrieve its length once. local len = rawlen(FUNCTABLE) -- Lua's repeat-until loop works, but I prefer while loops. I assume PedIsDead -- returns a boolean. while (not PedIsDead(player)) do -- Generate an index between 1 and len; then, retrieve the element, a -- function, at i and call it. local i = math.random(len) local func = FUNCTABLE[i] func() -- Finally, wait the specified amount of time. Wait(30000) end return 0 end main(#arg, arg)