如何在pygame中处理移动对象而不必不断地重新绘制背景



我正在制作一个简单的游戏,其中有一个可移动的图像。它只是由箭头键控制,并且此功能运行良好。然而,我遇到了它留下痕迹的问题,应该通过添加screen.fill((0, 0, 0))来解决这个问题,这样它就可以删除以前的位置。然而,绘制背景需要读取900行数据并显示900张32x32p的图像,所以当我还必须重新绘制背景时,python似乎无法处理这种不断崩溃的情况。有没有其他方法可以让我在保留背景的同时拍摄运动图像?

一些相关代码:

用于绘制背景

while Scene1Read == False:
read = open("testgraphics.txt", "r")
xcoords = -32
ycoords = 0
squarenum = 0
for x in read:
squarenum += 1
if xcoords < 1024:
xcoords += 32
else:
xcoords = -32
ycoords += 32
squarecolorformatting = x[-6:]
squarecolor = squarecolorformatting[:-1]
if squarecolor == "METAL":
img = pygame.image.load("metal.png")
screen.blit(img, (xcoords,ycoords))
elif squarecolor == "SANDx":
img = pygame.image.load("sand.png")
screen.blit(img, (xcoords,ycoords))
elif squarecolor == "TRAPD":
img = pygame.image.load("trapdoor.png")
screen.blit(img, (xcoords,ycoords))
else:
pygame.draw.rect(screen,colorsdict[squarecolor], [xcoords,ycoords,32,32])
terminalfont = pygame.font.Font("falloutterminal.ttf", 16)
testtext1 = terminalfont.render(str(squarenum), False, (255, 0, 255))
screen.blit(testtext1,(xcoords,ycoords))
Scene1Read = True
read.close()

用于移动字符

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -16
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = 16
y1_change = 0
elif event.key == pygame.K_UP:
x1_change = 0
y1_change = -16
elif event.key == pygame.K_DOWN:
x1_change = 0
y1_change = 16
x1 += x1_change
y1 += y1_change

您的背景是否滚动或具有可移动的动态元素?如果不是,而且它只是一个静态背景,我为我的游戏做的一个解决方案是将背景制作成一个图像文件,所以每次重新绘制背景时,它只需要处理一个blit函数调用,而不是对每个瓦片进行blit处理来重绘背景。可能还有其他我不知道的解决方案,但我建议考虑这个选项

相关内容

最新更新