#python #python-3.x #class
#python #python-3.x #класс
Вопрос:
Я выполнял упражнение, и нам нужно создать caterpillar с атрибутом size из другой функции. В приведенном ниже коде я добавил атрибут size от 0 до 3.
class Caterpillar:
def __init__(self):
self.size = random.randrange(0, 3)
x = random.randrange(50, 950)
y = random.randrange(50, 950)
self.xcoord = x
self.ycoord = y
Однако в приведенном ниже коде, когда я попытался добавить размер в этой строке pygame.draw.ellipse(screen, red, [x, y, size, 40, 45])
, но я получил ошибку.
def draw_critter(self, screen):
x = self.xcoord
y = self.ycoord
size = self.size
pygame.draw.ellipse(screen, red, [x, y, 40, 45])
pygame.draw.ellipse(screen, black, [x 6, y 10, 10, 15])
pygame.draw.ellipse(screen, black, [x 24, y 10, 10, 15])
pygame.draw.line(screen, black, (x 11, y 1), (x 9, y - 10), 3)
pygame.draw.line(screen, black, (x 25, y 1), (x 26, y - 10), 3)
Я не понимаю, почему я получаю эту ошибку
File "D:/UniFiles/Sem/159/critters.py", line 53, in <module>
critter.draw_critter(screen)
File "D:UniFilesSem159mycritters.py", line 27, in draw_critter
pygame.draw.ellipse(screen, red, [x, y, size, 40, 45])
TypeError: Invalid recstyle argument
Я не уверен, действительно ли я понимаю, как работает класс. Не мог бы кто-нибудь, пожалуйста, показать мне пример того, как я могу реализовать функцию draw_critter для создания всей гусеницы, а не только головки.
Комментарии:
1. Как
draw.ellipse
определяется? Сообщение об ошибке указывает на несоответствие того, что ожидала функция, и того, что вы ей подавали.2. Проблема не в реализации вашего класса, а в вашем
pygame.draw.ellipse
использовании. Проверьте документы по API для этого — похоже, что он ожидает pygame. Прямоугольный объект, а не список.3. Я не понимаю, что вы имеете в виду? но я использую эти коды выше для основного кода и другого кода, где он рисует элементарный элемент
4. Это означает, что вы неправильно используете API.
5. не могли бы вы, пожалуйста, привести мне пример того, как я должен это сделать? Извините, я действительно не понимаю. даже если я прочитаю это.
Ответ №1:
Посмотрите документы API для ellipse https://www.pygame.org/docs/ref/draw.html#pygame.draw.ellipse
ellipse()
ожидает:
pygame.draw.ellipse() draw an ellipse ellipse(surface, color, rect) -> Rect ellipse(surface, color, rect, width=0) -> Rect
А что такое Rect? Он ожидает этого:
pygame.Rect
pygame object for storing rectangular coordinates
Rect(left, top, width, height) -> Rect
Rect((left, top), (width, height)) -> Rect
Rect(object) -> Rect
В нем нигде не упоминается параметр size.
Я не совсем уверен, что вы пытаетесь сделать, но звучит так, будто вы хотите одно длинное многоточие для caterpillar? Тогда, может быть, вы можете просто нарисовать size
количество многоточий и немного расставить их.
Например:
for s in range(self.size):
pygame.draw.ellipse(screen, red, [x s*10, y, 40, 45])
Это только один способ, я понятия не имею, как вы хотите, чтобы это выглядело.