我一直在尝试在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