2011-12-05 8 views
3

After yesterdays 내가보기 싫은 질문.파이 게임과 트위스트를 결합하여

나는 순수한 네트워크 재생을 목적으로 작품에 tic tac toe program을 가지고 있습니다.

트위스트 된 것을 이해하면 서버 클래스에서 원자로를 실행 한 다음 각 플레이어가 클라이언트 (서버가 별도의 엔터티 임)로 연결되도록해야한다는 것이 었습니다. 마지막 질문에서 언급 한 내용을 감안할 때 나는 완전히 잘못된 방향으로 가고 있다고 생각합니다.

나는 무엇을해야하고 어떤 튜토리얼이나 문서를 집중해야합니까?

답변

12

파이 게임을 꼬인 상태로 결합하는 데 따른 어려움은 누가 메인 루프를 제어하는지에 대한 문제입니다. 이것은 보통 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"을 확인하고 꼬인 개발자 중 한 명이 만든 트위스트 및 파이 게임.

+0

정말 유용합니다. 직장에서 퇴근하자마자 나는 그것을 소용돌이 떨게 할 것입니다. – Teifion

+0

+1 +1. 내가 최근에 발견 한 것처럼 파이 게임이 스레드에서 실행되는 것을 원하지 않습니다 ... – Claudiu

관련 문제