Python 3.7.1 Pygame 1.9.4 Ошибка: TypeError: ожидается целочисленный аргумент, получен float - PullRequest
0 голосов
/ 16 декабря 2018

Итак, я строил действительно простую игру.Я собирался совершить круговой прыжок.До этого все работало нормально.Но когда я попытался добавить прыжок в игру, появилось сообщение об ошибке: «TypeError: ожидался целочисленный аргумент, получен float», я проверял код несколько раз.Я не мог найти ошибку.Поэтому я прошу о помощи.Вот мой код:

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("A GAME")

screenWidth = 500

x = 100
y = 400
width = 50
height = 50
vel = 10
r = 15

isJump = False

jumpCount = 10

run = True

clock = pygame.time.Clock()

while run:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    clock.tick(60)

    keys = pygame.key.get_pressed()

    if keys [pygame.K_a] and x > r:
        x -= vel
    if keys [pygame.K_d] and x < screenWidth - r:
        x += vel
    if not (isJump):
        if keys [pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            neg = 1
            if jumpCount < 0:
                neg = -1
            y -= (jumpCount ** 2) * 0.5 * neg
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
    if keys [pygame.K_ESCAPE]:
        run = False

    win.fill((0, 0, 0))


    pygame.draw.circle(win, (255, 0, 0), (x, y), r, 0)
    pygame.display.update()

pygame.quit()

PLZ Help

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Единственный float в вашем коде - y;вы, вероятно, захотите что-то вроде

y -= int((jumpCount ** 2) * 0.5 * neg)

вместо

0 голосов
/ 16 декабря 2018

Использование 0,5 превращает ваш у в число с плавающей точкой.Я думаю, это не то, что вы хотите.Так что превратите это в:

y -= (jumpCount * jumpCount) // 2 * neg
0 голосов
/ 16 декабря 2018

Эта строка:

pygame.draw.circle(win, (255, 0, 0), (x, y), r, 0)

должна быть изменена на:

pygame.draw.circle(win, (255, 0, 0), (x, int(y)), r, 0)

, так как y - это число с плавающей запятой после этой строки:

y -= (jumpCount ** 2) * 0.5 * neg

или вы можетеисправить это так:

y -= int((jumpCount ** 2) * 0.5 * neg)

Ответ Руди будет работать так же, как и результат деления по полу (//): int:

y -= (jumpCount ** 2) // 2 * neg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...