2017-01-08 8 views
0

Ich habe versucht, das Springen in Small Basic zu simulieren, was ich ursprünglich zwar einfach hatte, aber schwieriger ist, als ich erwartet hatte. Immer wenn ich versuche, Animationen in einer for-Schleife zu verwenden, scheint das Programm immer die Verzögerung zu setzen, die ich am Anfang zugewiesen habe, gefolgt von einer einzelnen Animation/Bewegung. Zum Beispiel:Wie man Animationen in Small Basic stapelt

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 

ich dieses Programm erwartet die Kreise warum Position mit einer abnehmenden Rate zu erhöhen, sondern wartet es 1 Sekunde (die Gesamtzahl der Millisekunden in der Schleife) und bewegt dann den ganzen Weg nach oben an Einmal. Wie kann ich erreichen, was ich will und das beheben?

+0

Der Grund liegt daran, dass es für den ganzen Unter wartet dann auszuführen, sie es aktualisiert. Was Sie wollen, ist das Sub, um eine einzelne Anweisung zu haben und die Mathematik in einer for-Schleife, die das Unterprogramm aufruft. – Matthew

Antwort

0

Der Grund ist, weil es darauf wartet, dass das ganze Sub ausgeführt wird, dann aktualisiert es es. Was Sie wollen, ist das Sub, um eine einzelne Anweisung zu haben und die Mathematik in einer for-Schleife, die das Unterprogramm aufruft.

0

+ Matthew hat die Ursache richtig. Das Threading in Small Basic ist ein wenig seltsam und unvorhersehbar, und ja ... der Thread mit dem Befehl move wird die Verschiebungsanforderungen erst sehen, wenn das Tastendruckereignis abgeschlossen ist. Hier

ist eine Version des Codes mit dem Umzug in den Haupt-Thread gestellt:

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 
Verwandte Themen