2017-12-06 4 views
0

나는 거북이를 사용하여 파이썬 게임을하고 있습니다.파이썬 거북이 이동 플랫폼

키 누르기에서 위아래로 이동 (점프)하는 플레이어 개체가 있습니다. 나는 플레이어가 점프해야하는 움직이는 플랫폼을 추가하려고합니다.

나는 움직이는 플랫폼을 루프 while에 넣어 보았습니다. 문제는 플랫폼이 계속 이동하기 위해 루프가 실행되고 있기 때문에 프로그램이 키 누름을 감지하지 못하기 때문입니다.

나는 주 while 루프 안에서 움직이려고했으나 작동하지 않았다.

while True 루프에서 플랫폼을 계속 이동하고 리스너를 활성화하려면 어떻게해야합니까?

# moving platform 
while True: 
    s13.backward(3) 
    if s13.xcor() > 250: 
     s13.setheading(0) 
    if s13.xcor() < -200: 
     s13.setheading(180) 

... 
turtle.listen() 
turtle.onkey(jump, "Up") 

어떤 조언에 감사드립니다 ...

+0

코드는 게시 할 때 서식을 유지하지 않았습니다 ... turtle.listen() 및 onkey가 while 루프 외부에 있습니다. – chappie

답변

1

while True: 문은 거북이 같은 이벤트 기반 환경에서 곳이 없습니다. 사용 가능한 솔루션이 두 가지 이상 있습니다. 가장 직접적인 것은 거북이 내장 된 ontimer() 이벤트를 사용하여 고정 (또는 가변) 간격으로 독립적으로 작동하는 기능을 갖는 것입니다.

또 다른 옵션은 프로그램에 스레드를 도입하는 것입니다. 그러나 거북이는 기반이므로 모든 그래픽 작업을 메인 스레드를 통해 처리해야하므로 상황이 복잡해집니다.

from turtle import Turtle, Screen 

screen = Screen() 

s13 = Turtle('square') 
s13.color('red', 'blue') 
s13.shapesize(1, 3, 2) 
s13.penup() 

def jump(): 
    s13.color(*reversed(s13.color())) 

# moving platform 
def move_platform(): 
    s13.backward(3) 

    if s13.xcor() > 250: 
     s13.setheading(0) 
    if s13.xcor() < -200: 
     s13.setheading(180) 

    screen.ontimer(move_platform, 100) 

# ... 
screen.onkey(jump, "Up") 
screen.listen() 

move_platform() 

screen.mainloop() 

platf :

원유 예 스레딩

  • 파이썬 거북

  • ontimer 파이썬 거북 :

    위한 StackOverflow의 검색 시도 orm은 앞뒤로 움직입니다. 위쪽 화살표를 누르면 (창이 활성화 된 상태에서 창을 클릭 한 후) 플랫폼이 채워지고 외곽선이 떠있는 것처럼 보입니다.

+0

감사합니다 ... 그건 의미가 있습니다 ... 스레드의 사용이 내 마음을 넘어 섰지 만 결코 사용하지 않았다. 나는 그 시간을 내가 어떻게 배울 것 같아 ... 메인에서 루프를 제거하고 ontimer를 추가했습니다. 그것은 작동하지만 플레이어가 "점프"하는 동안 s13은 움직이지 않습니다. – chappie

+0

또한 ontimer()를 제안했지만 해결 방법은 100 % 중 하나였던 다른 게시물을 읽습니다. 스레드가 서로 방해하지 않고 두 개의 분리 된 obj의 이동을 만드는 유일한 방법입니까? 그들은 사용하기가 어렵습니까? – chappie

+0

@chappie, 코드를 보지 못한 채로 플레이어가 점프하는 동안 플랫폼이 움직이지 않는 이유를 말할 수 없습니다. 아마도'ontimer()'는 여전히 선택 사항입니다. – cdlane