ожидается целочисленный аргумент, получена ошибка с плавающей точкой - PullRequest
0 голосов
/ 12 декабря 2018

Я на Windows 8, я использую Python 3.7, и у меня есть проблема с Pygame.

Прежде всего, извините за мой плохой английский.Я пытаюсь следовать основным играм v1 от magpi, и я пытаюсь использовать drop.py, чтобы проверить его, но когда я запускаю, он возвращает мне ошибку -> ожидается целочисленный аргумент, получил float

Iя застрял в этой строке

    if surface.get_at((player["x"], player["y"] + player["height"])) == (0, 0, 0, 255):

, и это переменный источник

player = {
"x": int(windowWidth / 2),
"y": 0,
"height": 25,
"width": 10,
"vy": 5

}

Я преобразовал игрока ["x"], потому что я знаю Pygame.surface.get_at ожидает целое число, а не число с плавающей запятой.Но даже если я преобразовал значение с плавающей точкой с помощью функции int (), я все равно получаю эту ошибку.

Можете ли вы помочь мне, пожалуйста, я попытался напечатать значение, чтобы убедиться, что оно возвращает целое число, и это делаетно я не понимаю, почему я все еще получаю ошибку.

Я искал на stackoverflow, и ни одна из тем не помогла мне в этой проблеме.Вот почему я впервые спрашиваю о stackoverflow.

Заранее благодарю за любой ответ.

update: я преобразовал всю свою переменную в целое число внутри своих функций и игровой работы,но это кажется жестко закодированным для меня.Я сделал что-то неправильно ?

    if surface.get_at((int(player["x"]), int(player["y"]) + int(player["height"]))) == (0, 0, 0, 255):

1 Ответ

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

Работа с числами с плавающей запятой и целыми числами при программировании игры на pygame и python иногда может показаться немного неуклюжей.Это потому, что экран измеряется в пикселях как целые числа.Поэтому вы не можете пытаться рисовать или получать доступ к пикселям с плавающей точкой без их предварительного преобразования.Есть пара решений:

1) Не работать с поплавками.Это ограничит возможности вашей игры, но простые игры могут сойти с рук.Преобразование всего времени в int эквивалентно этому.

2) Конвертируйте ваши поплавки в последний возможный момент перед рисованием или получением доступа к любым пикселям.Теперь вы можете продолжать работать на игрока с поплавками.Это поможет сделать ваш код более приятным для просмотра и поможет округлять ошибки при повторных вызовах int.Ошибки округления могут привести к тому, что на экране все будет казаться немного «выключенным».

, например (хотя и простое):

speed = 1.5
player["x"] += speed
player["y"] += speed / 2
if surface.get_at(int(player["x"]), int(player["y"] + player["height"])) == (0, 0, 0, 255):
    # do stuff

Обратите внимание на последний возможный моменткогда задействованы пиксели, числа преобразуются.также обратите внимание на операцию player["y"] + player["height"].Результат операции преобразуется в int () вместо каждого отдельного.

Каждый раз, когда вы можете ограничить число преобразований, вы сохраните свой код в чистоте и устраните ошибки округления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...