首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理游戏中的移动对象而不必不断地重新绘制背景

如何处理游戏中的移动对象而不必不断地重新绘制背景
EN

Stack Overflow用户
提问于 2020-08-19 15:30:11
回答 1查看 322关注 0票数 4

我正在制作一个简单的游戏,其中有一个移动的,在我的例子中,图像。它只是由箭头键控制,而且这个功能工作得很好。但是,我有一个问题,它留下了它的线索,我们应该通过添加screen.fill((0, 0, 0))来解决这个问题,这样它就移除了前面的位置。然而,绘制我的背景需要读取900行数据和显示900幅32x32p图像,所以当我不得不重新绘制我的背景时,python似乎无法处理经常发生的崩溃。还有什么方法可以让我在保留背景的同时拥有一个运动图像呢?

一些相关守则:

用于绘制背景

代码语言:javascript
复制
    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()

因为移动角色

代码语言:javascript
复制
    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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 16:22:14

你的背景是滚动还是有动态元素四处移动?如果不是--这只是一个静态的背景,我为我的游戏做的一个解决方案是,我把背景变成一个图像文件,所以每次它重新绘制背景时,它只需要处理一个blit函数调用,而不是对每一个平铺来重新绘制背景。也许还有其他我不知道的解决方案,但我建议考虑一下这个选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63490371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档