Когда я помещаю в .нарисуйте круг в середине моего окна, я получаю сообщение об ошибке

#python #pygame

#python #pygame

Вопрос:

это примечание к коду: в коде есть некоторые вещи, которые мне еще предстоит реализовать. Я использую pygame для создания игры с прокруткой и пытаюсь разобраться в основах.

 import pygame

class Player:

    def __init__(self, x, y, size):
        self.x = x
        self.y = y
        self.size = size
        self.jumping = False
        self.jump_offset = 0


WHITE = (255, 255, 255)
BLACK = 0
W = 1280
H = 720
HW = W / 2
HH = H / 2

win = pygame.display.set_mode((W, H))
CLOCK = pygame.time.Clock()
FPS = 30
pygame.display.set_caption('if the shoe fits wear it')

p = Player(HW, HH, 30)
jump_height = 50

running = True
while running:
    pygame.draw.circle(win, WHITE, ((p.x, p.y)), p.size, BLACK)#problem
    pygame.display.update()
    CLOCK.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
  

это ошибка

 Traceback (most recent call last):
File "C:/pygame/jump.py", line 34, in <module>
pygame.draw.circle(win, WHITE, ((p.x, p.y)), p.size, BLACK)
TypeError: integer argument expected, got float

Process finished with exit code 1
  

ожидаемый целочисленный аргумент, получен float

Комментарии:

1. Одним из аргументов pygame.draw.circle является float , и он ожидает int . Попробуйте напечатать типы каждого аргумента или пошагово выполнить свой код с помощью отладчика, чтобы увидеть, в каком аргументе проблема. (Я бы поставил деньги на p.x или p.y ).

2. Хорошо, итак, вы прочитали сообщение об ошибке? Чего ты не понимаешь?

3. Также: в вашем коде ошибка отступа с running=True

Ответ №1:

В pygame любые аргументы, которые относятся к пикселям, должны иметь тип int , а не float . Вы можете исправить это, изменив HW и HH :

 HW = W // 2
HH = H // 2
  

/ Оператор всегда возвращает значение с плавающей точкой. // Оператор выдает вам, int если оба операнда являются int s.