python - 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 上添加间距,但它没有改变任何东西我也尝试更改窗口大小,但这也没有改变任何东西
任何帮助,将不胜感激
解决方案
您必须按墙的大小缩放墙的位置。
定义墙段的大小。例如:
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)
推荐阅读
- android-studio - Kotlin Multiplatform 应用程序在启动时崩溃
- c# - EF 6 Plus - 如何进行未来的原始查询
- laravel - 多列验证不同的数组
- java - 求一个单词在二维矩阵中出现的最大次数
- c++ - 如何在原始地图中使用带有反射的比较器对地图进行排序?
- c - 如果我不打印变量的地址,C 中的指针算术不会指向正确的变量
- javascript - IONIC 5 如何在没有白屏的情况下重新加载页面
- java - 尝试在空对象引用上调用虚拟方法 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()'
- python - 在 vs 代码的终端中运行 python 会给我一个语法错误,但是,手动选择代码并运行它不会给我语法错误
- machine-learning - 在 Lipschitz Continuous 上使用三次样条(平滑函数)