Python pygame多次将同一张图片

时间:2019-10-16 17:36:58

标签: python pygame surface blit imagesloaded

为什么我的程序无法删除多次加载的同一张图片?

Imagea = pygame.image.load('imagea.png')
Imageb = pygame.image.load('imageb.png')

游戏内幕

deck = abaa
for i in deck:
     for position in positions:
      if(i) == deck[0]:
           if(i == a):
           gamedisplay.blit(imagea, positions[0])
           elif(i == b):
           gamedisplay.blit(imageb, positions[0])
      if(i) == deck[1]:
           if(i == a):
           gamedisplay.blit(imagea, positions[1])
           elif(i == b):
           gamedisplay.blit(imageb, positions[1])
      if(i) == deck[2]:
           if(i == a):
           gamedisplay.blit(imagea, positions[2])
           elif(i == b):
           gamedisplay.blit(imageb, positions[2])
      if(i) == deck[3]:
           if(i == a):
           gamedisplay.blit(imagea, positions[3])
           elif(i == b):
           gamedisplay.blit(imageb, positions[3])

似乎发生的只是卡座0和卡座1显示imagea和imageb。但是,甲板2和3不会显示在position[2]position[3]上。

1 个答案:

答案 0 :(得分:0)

deck是一个列表,i是该列表的元素。当然,不必评估是否是列表的元素。这个评估是问题。 请注意,如果ideck中多次(例如在索引0和2处),则将永远不会对if i == deck[2]:进行评估,因为if i == deck[o]:首先会被评估True

以下,我假设deckposition具有相同数量的元素。

使用enumerate遍历deck并得到一个包含元素索引和元素本身的元组:

for i, d in enumerate(deck):
    p = positions[i]
    if d == a:
       gamedisplay.blit(imagea, p)
    elif d == b:
       gamedisplay.blit(imageb, p)

或使用zip同时遍历deckpositions

for d, p in zip(deck, positions):
    if d == a:
       gamedisplay.blit(imagea, p)
    elif d == b:
       gamedisplay.blit(imageb, p)