问题描述
我正在尝试创建一个游戏,其中多个相同的图像将沿着我的窗口边界随机闪烁。但我不知道如何多次以及沿边界对它进行 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 应用程序循环必须:
- 通过
pygame.event.pump()
或pygame.event.get()
处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过
pygame.display.update()
或pygame.display.flip()
更新显示 - 限制每秒帧数以限制 CPU 使用率
# 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()