2016-01-20 49 views
2

我添加變量(pygame的表面)到像這樣的列表,用來設置在整理我的遊戲呈現表層:python:保持同步到原始字典嗎?

self.gameLayers = { 
    0: [self.backDrop] 
} 

def add_layer(self, surface, priority): 
    self.gameLayers.setdefault(priority, []).append(surface) 

add_layer(self.alphaFadeLayer, 1) 

基本上,它添加到列表的字典裏面,self.alphaFadeLayer現在會在self.gameLayers[1][0],這很好。但是現在,如果我對self.alphaFadeLayer進行更改,使用self.gameLayers中的內容繪製到屏幕的表面根本不會改變,並且在更改後比較兩個表示它們不再相等,它們是在改變之前。
如果它的事項,這就是我如何編輯面:

# Reset the layer and make it slightly more transparent than before 
self.fadeAlpha = max(0, self.fadeAlpha - 1) 
self.alphaFadeLayer = self.fadeLayer.copy() 
self.alphaFadeLayer.fill((255, 255, 255, self.fadeAlpha), None, pygame.BLEND_RGBA_MULT) 

我認爲蟒蛇其實並沒有表面複製,而只是把對它的引用到我的名單,我錯了在這麼想?複製另一個表面(它是基於哪個表面)將其拋棄?
我該如何做到這一點,我可以編輯self.alphaFadeLayer並將這些更改反映在列表中的副本中?

回答

0

使用

alphaFadeLayer = ... 

分配給alphaFadeLayer參照新的表面,現在alphaFadeLayer是指不同的表面,然後self.gameLayers[1][0]

也許你應該做的

alphaFadeLayer.blit(self.fadeLayer) 
+0

是啊,這工作就好了。猜猜我只需清空表面,然後將原件抹上即可從現在開始重置,謝謝!我想我明白爲什麼老人不工作。 – leod