PyGame: draw.rect() has invalid parameters

2019-06-14 16:24发布

问题:

I'm trying to learn mouse events with PyGame, and I'm trying to draw a box wherever the user clicks. I'm setting a variable equal to pygame.mouse.get_pos(), and calling individual tuple members according to the mouse's x, y position. Here's the code:

import pygame, sys

pygame.init()
screen = pygame.display.set_mode((800, 600))

mousepos = pygame.mouse.get_pos()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            pygame.draw.rect(mousepos[0], mousepos[1], 20, 20)

The game starts up, but when I click, it crashes, giving this error:

Traceback (most recent call last):
  File "C:\Users\User\Documents\proj\Python\mouse.py", line 13, in <module>
    pygame.draw.rect(mousepos[0], mousepos[1], 20, 20)
TypeError: must be pygame.Surface, not int

I know what I'm doing wrong: my parameters for draw.rect() are of invalid types, but I don't know how to change the parameters so they're appropriate. So how do I fix this?

回答1:

Lets take a look at the function definition:

pygame.draw.rect(Surface, Color, Rect, Thickness)
  • Surface is a surface where you want to draw
  • Color is a tupple with RGB values defining the color to be used
  • Rect is a tupple in the format: (x,y,width,height)
    • x,y are the coordinates of the upper left hand corner
    • width, height are the width and height of the rectangle
  • Thickness is the thickness of the line. If it is zero, the rectangle is filled.

Based on this, you shoud do something like:

redColor = (255,0,0)
pygame.draw.rect(screen, redColor, (mousepos[0], mousepos[1], 20, 20), 1)

Sources:

The official documentation for python.draw can be found here:
http://www.pygame.org/docs/ref/draw.html

Mind the usefull Search examples for <function> button under every function description, which can lead you to multiple real world examples of usage.

Useful tutorials can also be found on the official pages: http://www.pygame.org/wiki/tutorials

Other unofficial tutorials, like this one, can be found with a bit of Googling effort.