2013-04-30 4 views
3

저는 FPS를 고려한 파이썬 게임 루프를 작성하려고합니다. 루프를 호출하는 올바른 방법은 무엇입니까? 내가 고려한 가능성 중 일부는 다음과 같습니다. 파이 게임 같은 라이브러리를 사용하지 않으려 고합니다.파이썬에서 게임 루프를 작성하는 적절한 방법은 무엇입니까?

1.

while True: 
    mainLoop() 

2.

def mainLoop(): 
    # run some game code 
    time.sleep(Interval) 
    mainLoop() 

3.

def mainLoop(): 
    # run some game code 
    threading.timer(Interval, mainLoop).start() 

4. 사용 sched.scheduler?

+0

두 번째와 세 번째 옵션은 동일한 메소드를 시작하므로 시간이 지남에 따라 커질 수 있습니다 ... – eumiro

+0

"파이 게임 같은 프레임 워크를 사용하고 싶지 않습니다."- 그럼 사용하려는 것은 무엇입니까? '킨터 '? 우리는 당신에게 우리가 당신에게 어떤 권고안을 줄 수 있기 전에 당신이 계획하고있는 것을 알려줄 필요가 있다고 생각합니다. – mgilson

+0

또한, 1은'while True :'로 작성되어야합니다. – mgilson

답변

7

정확하게 이해했다면 게임 논리를 시간 델타에 기초하고 싶을 것입니다.

모든 프레임 사이에 시간 차이를 가져 와서 개체가 그 시간 델타를 존중하도록하십시오.

import time 

while True: 
    # dt is the time delta in seconds (float). 
    currentTime = time.time() 
    dt = currentTime - lastFrameTime 
    lastFrameTime = currentTime 

    game_logic(dt) 


def game_logic(dt): 
    # Where speed might be a vector. E.g speed.x = 1 means 
    # you will move by 1 unit per second on x's direction. 
    plane.position += speed * dt; 

초당 프레임 수를 제한하려면 모든 업데이트 후에 적절한 시간을 자고 있어야합니다.

FPS = 60 

while True: 
    sleepTime = 1./FPS - (currentTime - lastFrameTime) 
    if sleepTime > 0: 
     time.sleep(sleepTime) 

하드웨어가 게임보다 빠르면 작동하는 것으로 알고 있습니다. 게임 루프에 대한 자세한 내용은 this을 참조하십시오.

추신 : 자바 변수 이름을 유감으로 여깁니다 ... 자바 코딩을 중단했습니다.

관련 문제