首页 > 解决方案 > TypeError:参数必须是矩形样式对象

问题描述

当我尝试运行我的程序时,最终出现以下错误

    Traceback (most recent call last):
      File "C:\Users\terry\Thonny\Computer Science\Final Snake.py", line 134, in <module>
         pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))
    TypeError: Argument must be rect style object

错误发生在我的代码的第 134 行。这是使用的代码,将不胜感激详细的答案,因为我对 pygame 相当陌生

    while True:
        for event in pygame.event.get():

            #------------------------- quits the game
            if event.type == pygame.QUIT:
               game_over();
            #-------------------------

            #------------------------- movement of the snake
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("RIGHT")
                if event.key == pygame.K_LEFT:
                    snake.change_dir_to("LEFT")
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("UP")
                if event.key == pygame.K_RIGHT:
                    snake.change_dir_to("DOWN")
            #-------------------------

        #----------------------------- adds to score if the nake eats the food
        foodpos = food_spawner.spawn_food()
        if(snake.move(foodpos)==1):
            score+=1
            food_spawner.set_food_on_screen(False)
        #------------------------------

        #------------------------------ draws the screen, the snake, and its food
        window.fill(pygame.Color("BLACK"))
        for pos in snake.get_body():
            pygame.draw.rect(window,pygame.Color("BLUE"),pygame.Rect(pos[0],pos[1],10,10))
        pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))
        #------------------------------

标签: pythonpygame

解决方案


问题在于它foodpos不是整数列表或元组。可以使用以下代码重新创建此问题:

foodpos = [ 'apple', 'pie' ]         # NOTE: strings not integers
pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))

给出:

Traceback(最近一次通话最后):文件“./rect_draw.py”,您的 exline 38,在 pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos 1 ,10,10)) TypeError: Argument must be rect style object

Pyagme rect 对象在其构造函数中采用 4 个整数。请参阅手册

将 的内容更改foodpos为整数:

foodpos = [ 10, 10 ]         # NOTE: integers
pygame.draw.rect(window,pygame.Color("RED"),pygame.Rect(foodpos[0],foodpos[1],10,10))

它工作正常。

示例代码没有显示 的​​内容foodpos,但无论它有什么,将其设为整数将解决问题。


推荐阅读