我将变量(pygame表面)添加到这样的列表中,用于设置我的游戏呈现表面图层的顺序:
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
中的内容绘制到屏幕的表面根本不会发生变化,并且在更改之后比较两者确实表明它们不是&# 39; t等于他们在改变之前的等于
如果重要,这就是我编辑表面的方式:
# 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)
我认为python实际上并没有复制表面,只是简单地将它引用到我的列表中,我认为错了吗?复制另一个表面(它是基于它开始的)是否会将其抛弃?
我如何实现它,我可以编辑self.alphaFadeLayer
并将这些更改反映在列表中的副本中?
答案 0 :(得分:0)
使用
alphaFadeLayer = ...
您指定alphaFadeLayer
对新曲面的引用,现在alphaFadeLayer
引用不同的曲面,然后self.gameLayers[1][0]
可能你应该做
alphaFadeLayer.blit( self.fadeLayer )