好的,所以我是Python的新手,也是一般的编程。但最近我一直在取得进展,并决定在http://www.usingpython.com上试用2D Minecraft教程 - 当我去运行代码时,这是不完整的,因为它是在教程的开头,它给了我这个错误:TypeError:Rect参数无效
教程说我应该看到一个带有我的多色2D阵列的窗口,但是它是一个黑色的窗口,几秒后消失并显示我说错误..
这就是我所拥有的,“rect”有什么问题?我相信,如果我没有遗漏任何东西,那就是他用来教授的代码的完美副本..沮丧,有帮助吗?谢谢!!
import pygame
from pygame.locals import*
#Color link to constants
BLACK = (0, 0, 0)
BROWN = (153, 76, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
#Constants, Same as variables but never changing - they're constant!
DIRT = 0
GRASS = 1
WATER = 2
COAL = 3
#Dictionary Linking Resources to colors
colors = {
DIRT : BROWN,
GRASS :GREEN,
WATER : BLUE,
COAL : BLACK
}
#THE 2D ARRAY
tilemap = [
[GRASS, COAL, DIRT],
[WATER, WATER, GRASS],
[COAL, GRASS, WATER],
[DIRT, GRASS, COAL],
[GRASS, WATER, DIRT]
]
#Useful Game Dimensions
TILESIZE = 40
MAPWIDTH = 3
MAPHEIGHT = 5
#Set up the display for PYGAME
pygame.init()
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
for row in range(MAPHEIGHT):
for column in range(MAPWIDTH):
pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], (column*TILESIZE,TILESIZE,TILESIZE))
pygame.display.update()
答案 0 :(得分:1)
您在这里错过了pygame.Rect
参数:
pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], (column*TILESIZE,TILESIZE,TILESIZE))
第三个参数必须是pygame.Rect
对象,你必须使用4个整数参数构建它(还有其他可能性)
类Rect(builtins.object) |矩形(左,顶,宽,高) - >矩形
这在语法上是正确的,因为quapka注意到一个参数从原始链接丢失了所以应该没问题:
pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], pygame.Rect(column*TILESIZE,row*TILESIZE, TILESIZE,TILESIZE))
编辑:我刚检查过,只要您提供4个参数,就不需要明确传递pygame.Rect
:
pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], (column*TILESIZE,row*TILESIZE, TILESIZE,TILESIZE))
您收到错误,因为您错误地提供了3个参数。