如何在小基础中堆叠动画

  • 本文关键字:动画 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 秒(循环中的总毫秒数),然后立即向上移动。我怎样才能实现我想要的并解决这个问题?

原因是,它等待整个子执行,然后更新它。 你想要的是 sub 有一个语句,并将数学放在调用子例程的 for 循环中。

+Matthew 有理由。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

相关内容

  • 没有找到相关文章

最新更新