파이 게임의 프레임 속도를 더 빠르게


10

내 게임을 프로파일 링하면 취미 게임 실행 시간의 대부분이 블리치와 플립 콜 사이에 있다는 것을 알 수 있습니다. 현재 약 13fps에서만 실행됩니다. 내 비디오 카드는 꽤 괜찮은 편이므로 파이 게임에서 사용하지 않는 것 같습니다.

파이 게임에서 설정해야하는 그래픽 / 디스플레이 옵션을 아는 사람이 있습니까? 아니면 파이 게임을 선택한 이후로 살아야 할 것입니까?

답변:


12

전체 화면 모드에서 실행중인 경우 pygame.HWSURFACE디스플레이를 초기화 할 때 플래그를 사용하여 파이 게임에게 하드웨어 표면을 사용하도록 지시 할 수 있습니다. 하드웨어 표면을 사용할 수 없으면 파이 게임이 자동으로 소프트웨어 표면을 사용한다고 생각합니다.

하드웨어 표면을 사용하지 않는 경우을 사용 pygame.display.update(rectangle)하는 것이 좋습니다 pygame.display.flip(). 이렇게하면 전체 디스플레이가 아닌 지정된 사각형 만 업데이트되므로 게임에서 실제로 전체 디스플레이를 업데이트하지 않으면 성능이 약간 향상 될 수 있습니다.

하드웨어 또는 OpenGL 표면 pygame.DOUBLEBUF을 사용하는 경우 하드웨어 이중 버퍼링을 사용하는 것도 있습니다. 즉, 그리기 기능이 두 버퍼 중 하나에 그려지고 flip()표시되는 버퍼를 교체합니다.


5

파이 게임에서 하나의 병목 현상은 실제로 글꼴 렌더링입니다. 동일한 텍스트 (동일한 글꼴 / 색상)를 두 번 이상 렌더링하지 말고 렌더링 된 표면을 캐시하여 재사용해야합니다. Font.render ()를 많이 사용하는 경우 이것을 고려하십시오.


4

talljosh의 답변 외에도 몇 가지 제안을 추가하고 싶습니다.

가능한 한 회전 및 스케일링을 피하십시오. 이러한 작업은 CPU에서 순수하게 수행되며 매우 느리게 진행됩니다.

직접 픽셀 읽기 / 수정을 수행하는 경우 Surface.get_buffer()메소드를 사용 하지 말고 Surface.set_at()/get_at()메소드를 사용하여 작업하십시오 .


2

가지고있는 테스트 콘솔 출력을 주석 처리하십시오. Cody가 위에서 언급했듯이 회전과 스케일링 사이에서 출력하는 경우 특히 프레임 속도를 크게 줄일 수 있습니다.


2

Pygame이 비디오 카드의 3D 가속 기능을 사용하지 않는 것이 맞습니다. 이는 동일한 제한이있는 SDL을 기반으로하기 때문입니다. 하나 개의 대안은 같은 시스템에서 게임을 다시하는 것입니다 pyglet 않습니다 만 그래픽 비슷한 라이브러리를 찾기 위해, 또는이를 위해 OpenGL을 코드를 직접 작성, 기본적으로 OpenGL을가 스프라이트를 가속 지원합니다.


피그 릿은 훌륭합니다.
— 공산주의 오리

1

놀랍도록 간단한 방법 중 하나는 psyco를 사용하는 것 입니다. 그것이 얼마나 도움이 될지 모르겠지만 필요한 것은

 import psyco
 psyco.full()

달리기를 시작하려면 시도해 볼 수도 있습니다.


Psyco는 실제로 현대적인 관용적 파이썬 코드에는별로 도움이되지 않습니다. JIT를 원한다면 PyPy를 사용하십시오 (PyGame이 작동하는지 확실하지 않습니다).
— coderanger

Pygame은 PyPy에서 작동하지 않지만 Pyglet은 작동합니다.
— coderanger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.