我需要用行*cols字段(在我的例子中是节点)绘制网格,为此我使用了pygame.draw.rect(),运行正常,但是当我想用pygame.draw.line()绘制网格线时,我遇到了一些“奇怪”的行为。也就是说,当end_pos在for loop中存在时,水平线的pygame.draw.rect()似乎依赖于pygame.draw.rect()的当前值。
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,但我不确定。
发布于 2020-07-17 20:50:58
我怀疑
rect的大纲在某种程度上“超越”了这条线,但我不确定。
当然可以。您可以在嵌套循环中绘制一个白色矩形,后面跟着一条灰色线。你不能在灰色之前画所有的白色矩形,线条是画出来的。矩形和直线交替绘制:
表示i,行枚举(grid.grid):对于j,枚举中的节点(行):pg.draw.rect(窗口,pg.Color(“白色”),(0 + i*grid.node_width,0+ j*grid.node_width,grid.node_width,grid.node_width)pg.draw.line(窗口,pg.Color(“灰色”),(j * grid.node_width,0),(j *grid.node_width),(grid.win_width)pg.draw.line(窗口,pg.Color(“灰色”),(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))https://stackoverflow.com/questions/62961521
复制相似问题