我需要使用row * cols字段(在我的情况下为节点)绘制网格,为此我使用了pygame.draw.rect()
,并且运行正常,但是当我想使用pygame.draw.line()
绘制网格线时,我来了跨越一些“怪异”的行为。即,end_pos
中存在i
时,水平线for loop
似乎取决于pygame.draw.rect()
中redraw()
的当前值。
import pygame as pg
pg.init()
clock = pg.time.Clock()
FPS = 60
WIN_DIM = 800
window = pg.display.set_mode((WIN_DIM, WIN_DIM))
class Grid:
grid = []
def __init__(self, row, col, win_width):
self.rows = row
self.cols = col
self.win_width = win_width
self.node_width = win_width // row
def make_grid(self):
for row in range(self.rows):
Grid.grid.append([])
for col in range(self.cols):
Grid.grid[row].append("node")
def redraw(grid):
window.fill(pg.Color("White"))
for i, row in enumerate(grid.grid):
for j, node in enumerate(row):
pg.draw.rect(window, pg.Color("White"), (0 + i*grid.node_width, 0 + j*grid.node_width, grid.node_width, grid.node_width))
pg.draw.line(window, pg.Color("Grey"), (j * grid.node_width, 0), (j * grid.node_width, grid.win_width))
pg.draw.line(window, pg.Color("Grey"), (0, i * grid.node_width), (grid.win_width, i * grid.node_width))
pg.display.update()
def main_loop():
main_grid = Grid(10, 10, WIN_DIM)
main_grid.make_grid()
run = True
while run:
clock.tick(FPS)
for event in pg.event.get():
if event.type == pg.QUIT:
run = False
redraw(main_grid)
main_loop()
pg.quit()
但是当我在pg.draw.rect()
中删除redraw()
时,一切都很好:
我怀疑rect
的概述以某种方式“替代”了line
,但我不确定。
答案 0 :(得分:1)
我怀疑
rect
的概述会以某种方式“覆盖”该行,但我不确定。
是的。您在嵌套循环中绘制1个白色矩形,然后绘制1条灰色线。您不会在绘制灰色线条之前绘制所有白色矩形。矩形和直线是交替绘制的:
for i, row in enumerate(grid.grid): for j, node in enumerate(row): pg.draw.rect(window, pg.Color("White"), (0 + i*grid.node_width, 0 + j*grid.node_width, grid.node_width, grid.node_width)) pg.draw.line(window, pg.Color("Grey"), (j * grid.node_width, 0), (j * grid.node_width, grid.win_width)) pg.draw.line(window, pg.Color("Grey"), (0, i * grid.node_width), (grid.win_width, i * grid.node_width))
将其与以下内容进行比较:
for i, row in enumerate(grid.grid):
for j, node in enumerate(row):
pg.draw.rect(window, pg.Color("White"), (0 + i*grid.node_width, 0 + j*grid.node_width, grid.node_width, grid.node_width))
for i, row in enumerate(grid.grid):
for j, node in enumerate(row):
pg.draw.line(window, pg.Color("Grey"), (j * grid.node_width, 0), (j * grid.node_width, grid.win_width))
pg.draw.line(window, pg.Color("Grey"), (0, i * grid.node_width), (grid.win_width, i * grid.node_width))