2012-06-01 39 views
2

現在我有一個xyy數組來保存整數,決定哪個瓷磚畫到屏幕上。 (整數選擇我的tile_arr中的哪個瓦片)pygame blitting只更新表面

爲了獲得更好的性能,我只希望改變後的整數再被blit。

例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 

這會給我們陣列:

arr=[[1,2,2],[2,2,2],[2,1,2]] 

現在,當blitting到屏幕時,我會從tile_arr blit圖像:圖像編號1,2,2到頂行,2,2,2到中間行,和2,1,2到底部一排。當我對數組blit時,我使用每個值或arr的screen.blit,這是9個blits。我寧願只做兩件事。 (使用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

GRB

現在我只想叫sceen.blit() 5次,留下4綠色的方形格力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,調用一個改變的矩形列表。

我認爲最好的形式給出是創建你自己從DirtySprite類派生:

class Cell: pygame.sprite.DirtySprite

已經有用於保持圖像和矩形,你可以添加一個屬性持有的數量和屬性一個方法來改變德數,將其設置爲骯髒。

然後,您可以使用LayeredDirty類在屏幕上呈現髒小精靈。