2012-11-25 6 views
1

타일 기반의 게임을 만들고 맵을 모든 프레임으로 렌더링해야합니다. 현재 각 타일은 32X32이고, 보이는 맵은 28X28 타일입니다. 성능이 무섭다. 나는 최근에 보이는 타일 만 렌더링하도록 만들었지 만 여전히 FPS를 많이 향상시키지 못했습니다. 지금은 렌더링 속도를 높이는 방법을 찾고 있습니다. 나는 느린 것을 내가 표현하고있는 방식으로 본다. 모든 타일은 개별적으로 화면에 블리치됩니다. 이 일을하는 것이 더 효과적이었을 것입니다.파이 게임에서 타일 렌더링을 최적화하는 방법은 무엇입니까?

+0

렌더링이 병목 현상이라고 프로파일 링하고 결정 했습니까? – delnan

+0

지금은 프로그램이 하나의 스프라이트의 렌더링과 이동 만하고 있으며 스프라이트 만 렌더링하면 FPS가 크게 증가합니다. –

+0

프로그램의 속도가 렌더링과 관련이있을 수 있습니다. 프로그램이 렌더링되지 않고 대신 초당 프레임을 인쇄 해보십시오. 여전히 느린 경우 코드를 게시하여 정확하게 수행 한 방법과 더 빨리 수행 할 수 있는지 확인할 수 있습니다. – PygameNerd

답변

2

파이 게임 (afaik)에서 화면 업데이트는 항상 병목 하나입니다. 코드를 볼 수 없으므로 화면을 어떻게 업데이트하는지 모릅니다. 변경된 스프라이트 만 블리 팅하는 것이 시작이지만 변경된 부분은 화면에서 업데이트해야합니다. display.flip()을 사용하거나 update_rects()을 사용하는 것의 차이점은 변경된 rect 만 사용하는 것입니다. 나는 그것이지도를 스크롤 할 때 전혀 도움이되지 않는다는 것을 알고 있습니다. 이 질문을보십시오 : Why is this small (155 lines-long) Pacman game on Python running so slow?, 그것은 비슷한 주제를 가지고 있습니다.

지도에 타일과 스프라이트가 컴파일되었을 때 한 가지 시도한 점은 항상 현재 표시된 부분과 그 주변에 약 200 픽셀 정도의 영역에 대한지도의 미리 컴파일 된 이미지가있는 것입니다. 나는 그 안에 들어있는 모든 타일을 블리 칭할 필요없이 준비된 "땅"을 (여전히 업데이트 된 부분에서만) 블리트 할 수 있습니다. 물론, 액티브 스프라이트보다 위에있을 수있는 여러 레이어와 맵 부분이 있다면, 그것에 집중해야한다는 생각이 꽤 있습니다. 그것을 통해 생각하고 일하는 것은 흥미 롭습니다 만, 나는 당신이 그것을 얼마나 많이 얻을 수 있는지 말할 수 없습니다.

하나의 완전히 다른 가능한 해결책 : 저는 파이 게임을 한 번 시작했습니다 (그 전에는 C++에서 SDL을 작성한 이후로). 최근 다른 파이썬 게임 라이브러리 pyglet으로 이동했습니다. 이것은 파이 게임만큼 화면 전체를 업데이트하는 문제로 고통받지 않습니다 (OpenGL 가속화 사용으로 인한 것 같아요. 아직 가속화되지 않은 eee-Netbook에서 작동합니다). pygame에 어떤 식 으로든 구속되지 않는다면, pyglet을 살펴 보는 것이 흥미로울 것입니다.

관련 문제