0

我正在尝试制作一个令人耳目一新的计数器......例如 - 让我们使用鼠标的位置(在窗口内)。

我已经尝试过清除和重绘所有内容,但是当有很多元素要绘制时,它总是会出错。

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  

或类似的东西:http: //i.stack.imgur.com/4sfSS.png


所以,我的问题是:
有什么方法可以制作一个可以平滑刷新而不闪烁的计数器,可以在背景中绘制很多额外的东西;窗户的其他地方?类似于下面的东西,但也会移动。
http://i.stack.imgur.com/aZQ5T.png

抱歉链接混乱:没有足够的声誉发布图片...

4

2 回答 2

1

这不是一个很好的方法。

要做到这一点更简单,并且没有任何扩展,请尝试以下操作:

GraphicsWindow.Show()
Text = Shapes.AddText("")
Shapes.Move(Text,100,100)

While 1 = 1
Program.Delay(5)
Shapes.SetText(Text,Clock.Second)
EndWhile

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

于 2014-06-10T14:33:43.920 回答
0

您可以通过重写刚刚清除的元素来减少闪烁效果。例如,通过绘制一个矩形(比 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"来创建无限循环。

于 2014-06-09T22:02:32.707 回答