我如何做一个快速刷新计数器



我正在尝试创建一个刷新计数器…举个例子-让我们使用鼠标的位置(在窗口内)。

我试过清理和重新绘制所有东西,但当有许多元素要绘制时,它总是出错。

a = 1
While(a = 1)
  Program.Delay(10)
  GraphicsWindow.Clear()
  GraphicsWindow.DrawText(10,10,Mouse.MouseX)
  GraphicsWindow.DrawText(10,20,Mouse.MouseY)
EndWhile  

工作……除了它闪烁是因为刷新速度太快…如果我要增加延迟,它将无法正常工作,特别是在做秒表之类的事情时。问题是,它也不能支持具有大量命令的东西……如:

a = 1
While(a = 1)
  Program.Delay(10)
  GraphicsWindow.Clear()
  GraphicsWindow.DrawText(10,10,Mouse.MouseX)
  GraphicsWindow.DrawText(10,20,Mouse.MouseY)
  GraphicsWindow.DrawText(100,100,"Text")
  GraphicsWindow.BrushColor = "#FF0000"
  GraphicsWindow.DrawText(100,200,"Text")
  GraphicsWindow.BrushColor = "#00FF00"
  GraphicsWindow.DrawText(100,300,"Text")
  GraphicsWindow.BrushColor = "#0000FF"
  GraphicsWindow.DrawText(100,400,"Text")
  GraphicsWindow.BrushColor = "#000FF0"
  GraphicsWindow.DrawText(200,100,"Text")
  GraphicsWindow.BrushColor = "#FF0000"
  GraphicsWindow.DrawText(200,200,"Text")
  GraphicsWindow.BrushColor = "#0FF000"
  GraphicsWindow.DrawText(200,300,"Text")
  GraphicsWindow.BrushColor = "Black"
EndWhile

这只会造成很大的混乱…并且取消GraphicsWindow.clear()也不是一个选项,因为它会导致重写的混乱…

a = 1
While(a = 1)
  Program.Delay(10)
  GraphicsWindow.DrawText(10,10,Mouse.MouseX)
  GraphicsWindow.DrawText(10,20,Mouse.MouseY)
EndWhile  

或者像这样:https://i.stack.imgur.com/4sfSS.png


我的问题是:
是否有任何方法可以使计数器,可以刷新平滑而不闪烁,可以有很多额外的东西绘制在背景;在窗户的其他地方?类似下面的内容,但也会移动。
https://i.stack.imgur.com/aZQ5T.png

很抱歉链接很乱:没有足够的信誉来发布图片…

这不是一个很好的方法。

要做得简单得多,而且不需要任何扩展,试试这个:

GraphicsWindow.Show()
Text = Shapes.AddText("")
Shapes.Move(Text,100,100)
While 1 = 1
Program.Delay(5)
Shapes.SetText(Text,Clock.Second)
EndWhile

您正在添加文本形状,然后只需在需要时将文本设置为变量。

您可以通过重写您刚刚清除的元素来减少闪烁效果。例如,"删除"文本,绘制一个矩形(这比GraphicsWindow.Clear()快),然后在它后面立即DrawText。

但是这种刷新方式总是会产生闪光。更好的选择是使用Fremy的FC扩展,它提供了一种向GW添加"可更改"文本元素(称为标签)的方法。Fremy的扩展为SB添加了许多额外的函数,使该语言可用于创建实际的程序。这有点像JQuery到JavaScript。我强烈推荐使用它,你所要做的就是下载一个*.dll库。更多关于这个SB Wiki线程。

语法:

FCControls.AddLabel(Width [px], Height [px], Text)

的例子:

mylabel = FCControls.AddLabel(100, 30, "loading...")
FCControls.Move(mylabel,10,10)
While "true"
...
FCControls.SetText(mylabel,value)
EndWhile

这允许你刷新文本而不闪烁。

额外提示:您可以使用While "true"创建无限循环

相关内容

  • 没有找到相关文章

最新更新