Lua 在 GMOD 服务器上的文本循环

我想在 GMOD 上制作一个包含不同文本的框,每 6 分钟更换一次文本。以下是我已经完成的部分:

AddCSLuaFile( "classes.lua" );

surface.CreateFont( "mystyle", {
font = "Arial",
extended = false,
size = 20,
weight = 500,
blursize = 0,
scanlines = 0,
antialias = true,
underline = false,
italic = false,
strikeout = false,
symbol = false,
rotary = false,
shadow = false,
additive = false,
outline = false,
} );

function classesBox() -- 框函数
draw.RoundedBox(3, 5, 250, 320, 100, Color(0,0,0,200));
end
hook.Add("HUDPaint", "MyHudName", classesBox)

while true do
--无限循环
timer.Simple(50, function() draw.SimpleText("Text 1", "mystyle", 24, 275, Color(255,255,255,255)); draw.SimpleText("Text 2", "mystyle", 24, 300, Color(255,255,255,255)); end );
end

在客户端上,文本没有出现,我不知道该怎么办... 是否有比我做的更容易的方法呢? 我对 Lua 还是比较新的,我感激任何建议

编辑:另外,我想让它在服务器上自动播放,所以当我登录时,我看到其他玩家的框里显示相同的文本。 现在我把它放在了 autorun 文件夹中,但每次我登录时都会从头开始 :/ 我还想让它永远重复,但如果我使用 while 循环,游戏就会崩溃。

注意:我将计时器设为 50 秒只是为了测试它

点赞
用户444708
用户444708

你不应该这样做。使用变量来决定是否绘制并在 HUDPaint 函数中使用它。

function classesBox( )
  draw.RoundedBox( 3, 5, 250, 320, 100, Color( 0, 0, 0, 200 ) )
  if SomeCondition then
    draw.SimpleText( "Text 1", "mystyle", 24, 275, color_white )
    draw.SimpleText( "Text 2", "mystyle", 24, 300, color_white )
  end
end

SomeCondition = true
timer.Simple( 50, function( ) SomeCondition = false end )

计时器无法在正确的上下文中使用渲染函数,并且需要每帧绘制一次,而不仅仅是一次。

2016-06-20 12:19:31