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,0),200))
                print("..",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))
            #pygame.draw.rect(self.win,(self.x,self.y,15,15))
            main().walls()
            pygame.display.flip()
main().mainLoop()

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

任何帮助将不胜感激

解决方法

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

定义墙段的大小。例如:

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))

可以使用FPU简化代码。完整方法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,wall_size)
                if ch == ' ':
                    pygame.draw.rect(self.win,rect)
                if ch == 'a':
                    pygame.draw.rect(self.win,0),rect)

enumerate