如何解决如何在pygame中处理运动对象而不必不断重绘背景
我正在制作一个简单的游戏,其中有一个可移动的图像。它仅由箭头键控制,此功能可以正常工作。但是我有一个问题,那就是它留下了痕迹,应该通过添加screen.fill((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,ycoords))
elif squarecolor == "TRAPD":
img = pygame.image.load("trapdoor.png")
screen.blit(img,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,255))
screen.blit(testtext1,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函数调用,而不是将每个tile拖到重画背景。可能还有其他我不知道的解决方案,但我建议您考虑一下该选项
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。