2017-01-08 8 views
0

スモールベーシックでジャンプをシミュレートしようとしていましたが、これはもともとシンプルではありましたが、予想以上にトリッキーです。 forループでアニメーション(または移動)を使用しようとするたびに、プログラムは常に、開始時に割り当てられた遅延を1つのアニメーション/移動に続けます。私はこのプログラムは低下率で、なぜ位置の円を増加させるために期待されるが、代わりにそれは1秒(ループ内ミリ秒の合計数)を待ち、その後で全道を移動スモールベーシックでアニメーションを積み重ねる方法

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 

:例えば一度。どのように私が欲しいものを達成し、これを修正することができますか?

+0

理由がある:ここ

はメインスレッドに入れ移動を使用してコードのバージョンです。あなたが望むのは、サブルーチンが単一のステートメントを持ち、そのサブルーチンを呼び出すforループ内に数学を持つことです。 – Matthew

答えて

0

理由は、サブ全体が実行されるのを待ってから更新されるためです。あなたが望むのは、サブルーチンが単一のステートメントを持ち、そのサブルーチンを呼び出すforループ内に数学を持つことです。

0

+マシューは正しい原因を持っています。スモールベーシックのスレッディングはちょっと奇妙で予期せぬことです。そうです... 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 
関連する問題