2015-04-29 50 views
1

我試圖繪製功能和使用生成的圖表在Python(2.7.9),並發現了一個問題:我不能刷新我的產生的像素數據(RGB的元組)成pygame的像素陣列。這裏是我的代碼(我tryied運行):Pygame的像素陣列發生器

  1. 使用二維數組

    pixArr = pygame.PixelArray(surface) pixArr=[[(0,0,function(x,y)) for x in range(1,screenX)] for y in range(1,screeny)] del pixArr

在這裏,我已經意識到,pixArr不是一個普通的2D名單becouse的我未能輸出它(打印pixArr)

  1. 然後我試了用範圍

    pixArr[0:screenX*screenY] = [(0,0,function(curPix%screenX, curPix//screenY)) for curPix in range(0,screenX*screenY)]

我發現了一些像pygame的網站HERE這個代碼,但它給我的錯誤「ValueError異常:序列大小不匹配」,玩弄它變得清晰,它與一個只適用後單一顏色(例如顏色pixArr[0:screenX*screenY]=(0,0,255)整個屏幕藍色)

TL; DR:如何設置的每個像素,而無需使用環

For y in range(0,1000): 
    For x in range(0,1000): 
     gfx.draw(surface,x,y,(0,0,function(a,b))) #or pixArr in this line 

回答

0

我使用pygame的1.9.1,但它似乎PixelArrays改變了很多1.9.2所以要小心。

我剛試過了這個例子,它工作正常:

pixArr = pygame.PixelArray(surface) 
def f(i): 
    return i % 255 
pixArr[:] = [(0, 0, f(i)) for i in range(0, len(pixArr))] 

有一點要注意的是,這樣做:

pixArr = [(0, 0, f(i)) for i in range(0, len(pixArr))] 

不起作用,因爲它的PixelArray變量轉換成一個列表(在你的第一段代碼中)。

爲什麼你得到一個ValueError,我只是做了一些檢查,並好奇(並足夠surpsiringly),我注意到len(pixArray)不等於pixArray.surface.get_width() * pixArray.surface.get_height()。 我建議你在繼續之前對此進行一些檢查。

-

編輯:

我想過分享這個新的片斷我到因爲它看起來很有意思:

def f(i): 
    return i % 255 
length = len(pixArr) 
length2 = len(pixArr[0]) 
print length, length2 
for j in range(0, length): 
    array = [(0, f(j), f(i)) for i in range(0, length2)] 
    pixArr[j] = array 
+0

發現了另一個錯誤:範圍(0,LEN(pixArr) )必須使用的範圍(0,screenMaxX * ScreenMaxY) – Max

+0

實際上,仰視進一步,'LEN(pixArr)== surface.get_width()','而LEN(pixArr [I])== surface.get_height INSEAD( )' – kstenger

+0

確實!剛剛發現它。像素陣列上的Pygames網頁是愚蠢的不一致的。例如,像素陣列不具備「pygame.PixelArray.ndim \t - \t返回維數。」方法,不像寫在那裏。 – Max