파이 게임을 꼬인 상태로 결합하는 데 따른 어려움은 누가 메인 루프를 제어하는지에 대한 문제입니다. 이것은 보통 UI (GTK, Tkinter 등)의 메인 루프와 Twisted를 결합하고자하며, PyGame도 마찬가지입니다.
네트워크 지연이 중요하고 트위스트가 매우 좋은 스케줄링 프레임 워크를 가지고 있기 때문에 트위스트 리액터가 실행되어 메인 루프를 제어하게하고 LoopingCall을 사용하여 파이 게임에서 이벤트를 처리합니다. 아주 기본적인에서
:이 처음에는 간단한 것 같지만
from twisted.internet.task import LoopingCall
DESIRED_FPS = 30.0 # 30 frames per second
def game_tick():
events = pygame.events.get()
for event in events:
# Process input events
redraw()
# Set up a looping call every 1/30th of a second to run your game tick
tick = LoopingCall(game_tick)
tick.start(1.0/DESIRED_FPS)
# Set up anything else twisted here, like listening sockets
reactor.run() # Omit this if this is a tap/tac file
, 그것은 위험이 함께 제공됩니다. 게임 틱에서 처리하는 데 많은 시간을 할애하면 뒤틀린 원자로가 굶어 죽을 위험이 있으므로 이벤트를 처리 할 수 없게됩니다. 시간이 지정된 이벤트가 필요한 경우에는 차단하지 말고 reactor.callLater
과 같은 꼬인 도구를 사용하십시오. 차단을 피할수록 애플리케이션 응답 성이 향상됩니다. 비틀기에 대한 프로그래밍은 비동기식 또는 비 차단 라이브러리 용 프로그래밍을 한 번도 해 본 적이 없으므로 익숙해지는 사고 방식이기 때문에 몇 가지 단락에서 설명하는 것이 너무 많습니다.
보다 완벽한 예를 보려면 twisted (시뮬레이션 이벤트의 세계 시계 포함) 인터페이스와 게임 라이브러리에 대해 "gam3"을 확인하고 꼬인 개발자 중 한 명이 만든 트위스트 및 파이 게임.
정말 유용합니다. 직장에서 퇴근하자마자 나는 그것을 소용돌이 떨게 할 것입니다. – Teifion
+1 +1. 내가 최근에 발견 한 것처럼 파이 게임이 스레드에서 실행되는 것을 원하지 않습니다 ... – Claudiu