2017-01-08 6 views
0

Я пытался имитировать прыжки в Small Basic, который я изначально был, хотя и был простым, но сложнее, чем я ожидал. Всякий раз, когда я пытаюсь использовать анимацию (или перемещать) в цикле for, программа всегда, кажется, помещает любую задержку, которую я назначил в начале, за которой следует одна анимация/перемещение. Например:Как складывать анимации в Small Basic

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

Причины в том, что она ждет всех подразделов выполнять то он обновляет его. то, что вы хотите, это sub, чтобы иметь один оператор и иметь математику в цикле for, который вызывает подпрограмму. – Matthew

ответ

0

Причина в том, что он ждет выполнения всего суб, затем он обновляет его. то, что вы хотите, это sub, чтобы иметь один оператор и иметь математику в цикле for, который вызывает подпрограмму.

0

+ У Матфея есть причина правильно. Threading в Small Basic немного странно и непредсказуемо, и да ... поток с командой перемещения не увидит запросы перемещения до тех пор, пока не завершится событие нажатия клавиши.

Вот версия коды с переездом помещенным в основной поток:

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 
Смежные вопросы