首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >draw.rect()和draw.line()函数似乎相互覆盖

draw.rect()和draw.line()函数似乎相互覆盖
EN

Stack Overflow用户
提问于 2020-07-17 20:42:16
回答 1查看 267关注 0票数 1

我需要用行*cols字段(在我的例子中是节点)绘制网格,为此我使用了pygame.draw.rect(),运行正常,但是当我想用pygame.draw.line()绘制网格线时,我遇到了一些“奇怪”的行为。也就是说,当end_posfor loop中存在时,水平线的pygame.draw.rect()似乎依赖于pygame.draw.rect()的当前值。

代码语言:javascript
复制
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,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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))

将其与以下方面进行比较:

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62961521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档