【问题标题】:pygame will not draw rectanglespygame 不会绘制矩形
【发布时间】:2017-06-27 16:03:36
【问题描述】:

我正在使用 python 2.7 制作一个简单的游戏,每当我尝试绘制一个矩形时,我都会得到:

Traceback(最近一次调用最后一次): 文件“C:/Users/HP/Desktop/experiment.py”,第 335 行,在 (宽度,高度)]) TypeError: 无效的颜色参数

这是相关代码

BLACK = (0, 0, 0)
grid = []
for row in range(10):
    #add empty array
    grid.append([])
    for column in range(11):
        grid[row].append(BLACK)
WIDTH = 30
HEIGHT = 30
MARGIN = 5
#starting pygame
pygame.init()

#Setting window dimensions
WINDOW_SIZE = [425,320]
screen = pygame.display.set_mode(WINDOW_SIZE)
stopped = False
while not stopped:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            stopped = True
#draw grid
    for row in range(10):
        for column in range(11):
            Color = grid[row][column]
            pygame.draw.rect(screen,Color,
                             [((MARGIN + WIDTH) * column + MARGIN, (MARGIN + HEIGHT) * row + MARGIN),
                              (WIDTH ,HEIGHT)])
    clock.tick(60)

    pygame.display.flip()


pygame.quit()

任何帮助将不胜感激!!提前致谢!

编辑:如果需要,这里是 pastebin https://pastebin.com/jCXT0M4a 中的整个脚本

请原谅它的质量

【问题讨论】:

  • 这个错误对我来说似乎是不言自明的。当需要颜色时,您正在提供 (WIDTH, HEIGHT) 元组。根据函数调用的形式参数仔细检查您的参数。
  • 我查看了文档,pygame.draw.rect() 的参数是:Surface、color、Rect、width=0,pygame.Rect() 的参数是 ((left, top) , (width, height)) 所以我不知道为什么它不起作用
  • 我刚刚运行了这段代码并添加了正确的导入语句并且没有得到任何错误。您介意在其余代码中添加一个 pastebin 链接吗?
  • 这是整个脚本,请原谅它的大小和质量,我还在学习pastebin.com/jCXT0M4a
  • 我现在无法自行检查您的代码,但您的代码确实应该工作,所以我现在也很困惑...您是否尝试过将您的 Rect 参数定义为一个单独的变量并将其传递给您的 pygame.draw.rect() 调用?可能会改变您的错误所在并提供更多线索。

标签: python python-2.7 pygame


【解决方案1】:

在 for 循环中打印网格和 Color,您会看到网格的某些行包含元组列表,而不仅仅是元组。 refresh 函数会导致问题,尤其是以下几行:

row1 = [right_side[0],front[0],left_side[0],back[0]]
row2 = [right_side[1],front[1],left_side[1],back[1]]
row3 = [right_side[2],front[2],left_side[2],back[2]]

在我看来 row1-3 应该是元组列表,但是您创建了元组列表的列表:

[[(0, 255, 0), (0, 255, 0), (0, 255, 0)], [(255, 0, 0), (255, 0, 0), (255, 0, 0)], [(255, 255, 0), (255, 255, 0), (255, 255, 0)], [(0, 0, 255), (0, 0, 255), (0, 0, 255)]]

在 Python 3.5 及更高版本中,您可以使用最新的附加解包功能,允许您使用星号 * 运算符将列表解包到其他列表中。

row1 = [*right_side[0], *front[0], *left_side[0], *back[0]]

在其他版本中,您可以使用these techniques 之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多