如何在Small Basic中叠加动画

时间:2017-01-08 13:31:24

标签: smallbasic

我一直试图在Small Basic中模拟跳跃,我原本虽然简单但比我想象的更棘手。每当我尝试在for循环中使用动画(或移动)时,程序似乎总是放置我在开始时分配的任何延迟,然后是单个动画/移动。例如:

GraphicsWindow.Height = 480
GraphicsWindow.Width = 640

pX = 300
pY = 220

GraphicsWindow.KeyDown = KeyPressed

player = Shapes.AddEllipse(40, 40)
Shapes.Move(player, 300, 220)

Sub KeyPressed
  If GraphicsWindow.LastKey = "Space" Then
    For i = 1 To 10
      pY = pY - (10 - i)
      Shapes.Move(player, pX, pY)
      Program.Delay(100)
    EndFor
  EndIf
EndSub

我希望这个程序可以增加圆圈,为什么位置会以递减的速度增加,而是等待1秒(循环中的总毫秒数),然后立即向上移动。我怎样才能实现我想要的并解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

原因是因为它等待整个sub执行然后更新它。你想要的是sub有一个单独的语句,并在for循环中调用子程序。

答案 1 :(得分:0)

+马修有正确的理由。 Small Basic中的线程有点奇怪且不可预测,是的......带有move命令的线程在按键事件完成之后才会看到移动请求。

以下是代码的一个版本,移动到主线程中:

GraphicsWindow.Height = 480
GraphicsWindow.Width = 640

pX = 300
pY = 220

GraphicsWindow.KeyDown = KeyPressed

player = Shapes.AddEllipse(40, 40)
Shapes.Move(player, 300, 220)

top:
If moving = "true" then
  For i = 1 To 10
    pY = pY - (10 - i)
    Shapes.Move(player, pX, pY)
    Program.Delay(100)
  EndFor
  moving = "false"
endif
Goto top

Sub KeyPressed
  If GraphicsWindow.LastKey = "Space" Then
    moving = "true"
  EndIf
EndSub