如何提高使用嵌套循环绘制时的性能?

2024-06-13 11:57:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个程序,按程序生成一个带迷宫的地牢:

entities = {}
dungeonSize = 8
currentDungeon = (randint(0,dungeonSize-1),randint(0,dungeonSize-1))
lOR = 16 # Level of Randomness.

def gD(): # Generate Dungeon

    for i in range(dungeonSize):
        for j in range(dungeonSize):
            entities[(j,i)] = {}

    for dungeon in entities:
        r = randint(0,lOR)
        for k in range(16):
            for l in range(16):
                if randint(0,lOR*2) == 0:
                    for m in range(r):
                        entities[dungeon][((((l+m)*brickWidth),(k*brickHeight)))] = {"source":"brick.jpg",
                                            "info":["dungeon wall",u"parede da masmorra"]}     
                elif randint(0,lOR*2) == 1:
                    for m in range(r):
                        entities[dungeon][(((l*brickWidth),(k+m)*brickHeight))] = {"source":"brick.jpg",
                                            "info":["dungeon wall",u"parede da masmorra"]}

碰巧我需要在每一帧(每一块地和每一堵墙)绘制当前屏幕/迷宫。在这种情况下,为了节省一些内存,跟踪已更改的磁贴或类似的内容也非常复杂。你知道吗

以下是主循环的绘制过程:

def dCD(): # Draw Current Dungeon

    for wall in entities[currentDungeon]:
        gIS("GFX",entities[currentDungeon][wall]["source"],wall[0],wall[1])

地面也绘制在每一帧(我不能使用一个图像,因为我将创建随机类型的瓷砖)。你知道吗

def fWG(): # Fill with Ground

    for i in range(16):
        for j in range(16):
            gIS("GFX",ground,j*brickWidth,i*brickHeight)

有没有办法在Pygame中“释放一个曲面”,或者无论如何,将所有这些曲面blit并拥有20+FPS?(我现在有8帧。真是太落伍了。如果没有,你有什么建议?用C写游戏,想一个更聪明的算法来神奇地替换,擦除和重新利用每一帧的瓦片?你知道吗


Tags: insourcefordef绘制rangeentitiesrandint