首页 > 解决方案 > pygame rect大小没有改变

问题描述

import pygame

class  main():
    def __init__(self):
        self.scrX = 1000
        self.scrY = 1000
        self.win = pygame.display.set_mode((self.scrX, self.scrY))
        self.ln = 0
        self.li = 0
        self.lx = self.li + 400
        self.ly = self.ln + 400
        self.v = 1
        self.map = ["   aaaaaaa aaaaaaaaa",
                    "   aaaaaaa aa   aaaa",
                    "a  aaaaaa     a aaaa",
                    "aa        aaaaa aaaa",
                    "aaaaaaaaaaaaa   aaaa",
                    "a    aaaaaa   aaaaaa",
                    "a a   aaaa  aaa    a",
                    "a aa       aaa aaa a",
                    "a   aaaaaaaa   aaa a",
                    "aaa aaaaaaaa aaaaa a",
                    "aaa          aaaaa a",
                    "aaaaaaaaaaaaaaaaaaaa",
                                           ]

    def walls(self):
        for y in range(0, 192):
            z = 350
            if self.li == len(self.map[self.ln]):
               self.ln += 1
               self.li = 0
               print("n/")
            if ' ' in self.map[self.ln][self.li]:
                lx = self.li + z
                ly = self.ln + z
                pygame.draw.rect(self.win, (255,255,255), (lx, ly, 200, 200))
                print(".", self.ln, self.li)
                self.li += 1
            if 'a' in self.map[self.ln][self.li]:
                lx = self.li + z
                ly = self.ln + z
                pygame.draw.rect(self.win, (255,0,0), (lx, ly, 200, 200))
                print("..", self.ln, self.li)
                self.li += 1

    def mainLoop(self):
        while True:
            pygame.time.delay(10)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()

            self.win.fill((0,0,0))
            #pygame.draw.rect(self.win, (255,255,255), (self.x, self.y, 15, 15))
            main().walls()
            pygame.display.flip()
main().mainLoop()

如果我通过编辑来更改墙壁的大小,pygame.draw.rect(self.win, (255,255,255), (lx, ly, 200, 200))它不会在我运行它时改变墙壁的大小我尝试在墙壁的 x 和 y 上添加间距,但它没有改变任何东西我也尝试更改窗口大小,但这也没有改变任何东西

任何帮助,将不胜感激

标签: pythonpygame

解决方案


您必须按墙的大小缩放墙的位置。

定义墙段的大小。例如:

wall_size = 20

按段的大小缩放墙的位置,并用段的大小绘制一个矩形:

lx = self.li * wall_size + z
ly = self.ln * wall_size + z
pygame.draw.rect(self.win, (255,255,255), (lx, ly, wall_size, wall_size))

代码可以通过使用来简化enumerate。完整方法walls

class  main():
    # [...]

    def walls(self):
        z = 350
        wall_size = 20
        for y, line in enumerate(self.map):
            for x, ch in enumerate(line):
                lx = x * wall_size + z
                ly = y * wall_size + z
                rect = (lx, ly, wall_size, wall_size)
                if ch == ' ':
                    pygame.draw.rect(self.win, (255,255,255), rect)
                if ch == 'a':
                    pygame.draw.rect(self.win, (255,0,0), rect)


推荐阅读