2016-07-16 6 views
0

나는 이와 비슷한 비슷한 것을 알고 있지만 이전에 스크롤을위한 옵션이 아닌 "한 번에 전체 화면을 다시 그리지 마라"는 답변을 찾을 수 없었습니다. 2D 사수입니다. 비록 내가 필요하지 않을 때 전체 화면을 업데이트하지 않더라도 플레이어는 어쨌든 이동하지 않으면 프레임 속도를 알지 못합니다. 전체 화면을 다시 그려야 할 때입니다 ...파이 게임/SDL 낮음 Framerate at HD

그래서 게임이 렌더링되는 방식에 따라 전체 게임이 480 * 270 표면 (renderLayer)에 그려지며, 렌더링 기능의 끝에서 디스플레이가 뒤집히기 전에 스크린 크기까지 스케일이 조정됩니다.

480 * 270 창에서 게임을 실행하면 수백 개의 프레임 속도가 발생하지만 게임이 1080p에서 실행되자 마자 45 ~ 60fps를 얻을 수 있습니다. 전체 코드에서 변경되는 부분은 각 업데이트 프레임이 끝날 때 확장되어 화면에 버퍼가 넘치게되므로 나머지 코드는이 성능 저하와 관련이 없음을 명심하십시오.

표시

은과 같이 초기화한다 : 그것은 기본 드라이버보다 아주 약간 더 높은 프레임 속도를 산출하기 때문에

os.environ['SDL_VIDEODRIVER'] = 'windib' 
pygame.init() 
display = pygame.display.set_mode((0,0),FULLSCREEN|DOUBLEBUF|HWSURFACE) 

나는 windib을 사용했다.

렌더링이 끝나면 모든 객체가 renderLayer에 blit되었습니다.

display.blit(pygame.transform.scale(renderLayer,display.get_size()),(0,0)) 
pygame.display.flip() 
clock.tick() 
print(clock.get_fps()) 

는 특히 동기화 해이 중요 멀티 플레이어에서 오른쪽 속도로 모든 것을 유지 유용, 나는 보통 clock.tick (60)를 사용 명심,하지만 난처럼 시계두고 프레임 속도 테스트. tick() 그래서 성능 변화를 정확하게 나타낼 수 있습니다.

고해상도에서 프레임 속도를 높이거나 다른 방법으로 디스플레이를 확장하는 방법이 있다면 누구에게 알 수 있습니까? 디스플레이에서 OpenGL을 사용하는 것에 대해 들어 봤지만, 실험에서 말할 수있는 표준 파이 게임 표면에서 더 이상이 표면에 블리딩을 할 수 없습니다.

죄송합니다. 게시 된 코드가 매우 짧지 만 코드 게임이 2000 회 이상인 경우 모든 사람의 시간을 저해상도와 고해상도의 프레임 속도에 차이가 나는 코드로 낭비하고 싶지 않습니다. 게임 루프의 나머지 기능에서 참조되거나 전혀 사용되지 않습니다. 모든 것이 실제로 프레임을 그리는 데 renderLayer를 사용합니다.

시간을내어 질문에 답해 주신 모든 분들께 미리 감사 드리며,이 사이트에 대한 질문이 너무 구체적 인 경우 사과드립니다. 나는 어디에서 물어야할지 모르겠다.

답변

0

시동시에만 자산을 확장 할 수 있습니다. 논리는 기본 해상도를 유지할 수 있지만 대신 블리 팅 할 때 오프셋에 대한 계산을 수행합니다. 그렇게하면 모든 프레임을 확장하지 않아도됩니다.

파이 게임 및 성능에 대한 참고 정보 : 파이 게임, aka sdl1은 소프트웨어 렌더링을 사용합니다. 즉, 귀하의 GPU는 무거운 짐을하는 데 사용되지 않습니다. 거기에 파이썬에 대한 sdl2 포트가 있습니다.