GMOD服务器上的Lua文本循环

时间:2016-06-20 11:28:50

标签: loops timer lua

我想在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() -- Box thing function
draw.RoundedBox(3, 5, 250, 320, 100, Color(0,0,0,200));

end 
hook.Add("HUDPaint", "MyHudName", classesBox)


 while true do
--Infinite loop
 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秒只是为了测试它

1 个答案:

答案 0 :(得分:0)

你不应该这样做。使用变量来决定是否要绘制它并在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 )

计时器没有正确的上下文来使用渲染功能,它需要绘制每一帧而不是一次。