2017-01-08 8 views
0

스몰 베이직에서 점프를 시뮬레이트하려 했었습니다. 원래는 단순했지만 예상했던 것보다 더 까다 롭습니다. for 루프에서 애니메이션 (또는 이동)을 사용하려고 할 때마다 프로그램은 항상 처음에 할당 된 지연을 하나의 애니메이션/이동으로 지정합니다. 나는이 프로그램이 감소하는 속도로 왜 위치에 원을 증가 기대하지만, 대신 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

+ Matthew이 원인을 가지고 있습니다. 스몰 베이직 스레딩은 조금 이상하고 예측할 수 없지만 예 ... 이동 명령이있는 스레드는 키 누르기 이벤트가 완료 될 때까지 이동 요청을 볼 수 없습니다. 그것은 그것을 업데이트 후 실행 전체 서브를 기다리는 때문에

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