Python Pygame Blit одно и то же изображение несколько раз - PullRequest
1 голос
/ 16 октября 2019

Почему моя программа не может скопировать одно и то же изображение, загруженное несколько раз?

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

Внутри gameloop

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 показывает изображениеaи изображение. Однако колода 2 и 3 не отображаются в позиции [2] или позиции [3].

1 Ответ

0 голосов
/ 17 октября 2019

deck - это список, а i - это элемент списка. Нет необходимости оценивать, если это элемент списка, конечно, это так. Эта оценка является проблемой. Обратите внимание: если i многократно в deck (например, при индексах 0 и 2), то ifi == deck[2]: никогда не оценивается, потому что ifi == deck[o]: сначала оценивается True.

В дальнейшем я предполагаю, что deck и position имеют одинаковое количество элементов.

Либо используйте 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 для одновременного прохождения deck и positions:

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