2012-06-01 6 views
2

지금은 타일을 화면에 그려야 하는지를 결정하는 정수를 저장하기 위해 x 행 y 배열을 가지고 있습니다. (정수는 내 tile_arr에서 blit 할 타일을 선택합니다.)파이 게임 블리 팅 전용 표면 업데이트

더 나은 성능을 위해, 단지 blit'ed로 변경된 int 만 원합니다.

예 1 : 예를 들어

지금 나는 같은 것을 가지고, 그런 다음 사용자가 무엇을하는지에 따라

tile_arr = [image1,image2,image3,image4] 
arr = [[2,2,2],[2,2,2],[2,2,2]] 

arr에서 일부 값이 변경 될 수 있습니다 그렇게 말할 수 :

arr[0][0]=1 
arr[2][1]=1 

다음과 같이 배열을 제공합니다.

중간 행, 맨 윗줄, 2,2,2-에 이미지 번호 -1,2,2- 및 2,1,2에 : 화면에 블리 팅 때
arr=[[1,2,2],[2,2,2],[2,1,2]] 

지금, 나는 tile_arr 이미지를 블럭 전송 것 하단 행. 배열을 blit 할 때 각 값 또는 arr에 대해 screen.blit을 사용합니다. 이는 9 개의 블릿입니다. 차라리 두 개의 블리트 만 할 것입니다. (회만 screen.blit 사용)

예 2

tile_arr = [green.bmp, red.bemp, blue.bmp] 
feild_arr = [[0,0,0], [0,0,0], [0,0,0]] 

출력 :

G G G

G G G

G G G

사용자 변경 feild_arr

[[1,0,1], [0,2,0], [0,1,2]]로 출력 :

RGR

GBG

지금 난 단지 sceen.blit() 5 번 호출 할 GRB, 4 떠나 녹색 sqaures gree n, 아무것도 바뀌지 않았기 때문에.

다른 배열을 만드는 것을 생각했습니다. 이것은 첫 번째 복사본 일뿐입니다. 그런 다음 그것을 통해 실행하고 변경된 것을보기 위해 새로운 배열과 비교하지만, 나는 이것에 더 빠르고 더 좋은 방법이 있다고 생각합니다. 이제 예제는 3x3 밖에 없으므로 중복 배열을 만드는 것이 그리 나쁘지는 않지만 더 큰 배열로 작업하고 있습니다. 30x20 배열을 블리 칭할 때 얻을 수있는 모든 바로 가기가 필요합니다.

배열의 정수 값이 변경되었을 때만 blit을 수행하고 변경되지 않은 값을 건너 뜁니다 (blit 안 함)?

+2

정확하게 이해할 수 있을지 모르겠다. 하지만 스프라이트 그룹을 해봤습니까? [1] 아마도 'RenderUpdates' http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.RenderUpdates. [2] 너무 많은 배열을 사용하면 numpy가 유용 할 수 있습니다. – ninMonkey

+0

고마워, 나는이'RenderUpdates'를 둘러보고 내가 원하는 것을 찾으면 그것이 내가 필요로하는 것처럼 보인다. – hammythepig

답변

1

화면을 사용할 수 있습니다.변경된 사각형의 목록을 호출하여 blit을 한 번만 수행합니다. 이미 이미지와 사각형을 잡고 당신이 수를 포함하는 속성을 추가 할 수 있습니다에 대한 속성이 있습니다

class Cell: pygame.sprite.DirtySprite

:

나는 최고의 aproach 당신이 DirtySprite에서 클래스 유도를 소유 만드는 것입니다 생각 더티로 설정하는 숫자를 변경하는 메소드.

그런 다음 LayeredDirty 클래스를 사용하여 더러운 스프라이트를 화면에 렌더링 할 수 있습니다.