如何在不同的坐标处对多个相同的图像进行 blit?

问题描述

我正在尝试创建一个游戏,其中多个相同的图像将沿着我的窗口边界随机闪烁。但我不知道如何多次以及沿边界对它进行 blit。 这是到目前为止的代码

import pygame,sys

from pygame.locals import *
import random

pygame.init()
displayWidth = 700
displayHeight = 400
display = pygame.display.set_mode((displayWidth,displayHeight))
Death = False
  
  
def PlaceElon():
  ElonX = random.randrange(0,700,700)
  ElonY = random.randrange(0,400)
  x = []
  y = []
  Elonlist = [x,y]
  elon = pygame.image.load('elon.png')
  elonbig = pygame.transform.smoothscale(elon,(50,54))
  for x in Elonlist:
    x.append(ElonX)
  for y in Elonlist:
    y.append(ElonY)
  display.blit(elonbig,(Elonlist))
  pygame.display.update()
  
  
def RunGame():
  while not Death:
    background = pygame.image.load('background.png')
    BigBackground = pygame.transform.smoothscale(background,(displayWidth,displayHeight))
    display.blit(BigBackground,(0,0))
    PlaceElon()
    
RunGame()

解决方法

您需要生成坐标列表:

Elonlist = []
noOfElons = 10
for _ in range(noOfElons)
    x = random.randrange(0,700 - elon.get_width())
    y = random.randrange(0,400 - elon.get_height())
    Elonlist.appned((x,y))

循环绘制图像:

for ElonPos in Elonlist:
    Display.blit(elon,ElonPos)

但是,您的应用程序中还有一些问题。

在应用程序循环之前生成位置并加载图像:

background = pygame.image.load('background.png')
BigBackground = pygame.transform.smoothscale(background,(DisplayWidth,DisplayHeight))
elon = pygame.image.load('elon.png')

典型的 PyGame 应用程序循环必须:

# main application loop
run = True
while run:

    # limit frames per second
    clock.tick(60)

    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    # draw background
    Display.blit(BigBackground,(0,0))

    # draw the scene   
    for elonPos in Elonlist:
        Display.blit(elon,elonPos)

    # update the display
    pygame.display.flip()

pygame.quit()
exit()