我一直试图在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秒(循环中的总毫秒数),然后立即向上移动。我怎样才能实现我想要的并解决这个问题呢?
答案 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