Не можете использовать переменные в pygame.draw.circle? - PullRequest
5 голосов
/ 18 сентября 2011

Когда я пытаюсь создать фигуру, используя переменные, я получаю сообщение об ошибке:

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

import pygame._view
import pygame, sys
from pygame.locals import *
import random

pygame.init()

...

barrel = pygame.image.load("images\Barrel.gif")
barrel_create = 0
barrelx = screen.get_height()- barrel.get_height()
barrely = screen.get_width()/2 - barrel.get_width()/2
barrel_exist = 0
explosion_delay = 0

...

while running:

    if barrel_exist == 0:
        if barrel_create == 500:
            barrely = 200
        barrelx = random.randint(0,400)
        barrel_exist = 1
    if barrel_exist == 1:
        barrely = barrely + 0.1
        if barrely > 400:
            barrel_exist = 0

    if explosion_delay > 0:
        pygame.draw.circle(screen, (0,255,0), (barrelx, barrely), 64, 0)
    explosion_delay = explosion_delay + 1

    if explosion_delay == 100:
    explosion_delay = 0

Задержка взрыва> 0, когда ствол "выстрелил".

Ответы [ 3 ]

8 голосов
/ 18 сентября 2011

barrely = barrely + 0.1

barrely должен быть плавающей точкой в ​​какой-то момент из-за этой строки.

Я думаю, вы должны сделать pygame.draw.circle(screen, (0,255,0), (int(barrelx), int(barrely)), 64, 0), чтобы усечь переменные до целых чисел как функциитребуется.

2 голосов
/ 18 сентября 2011

Вы не говорите, какая строка выдает ошибку, но если вы используете Python 3, / дает результат float.Используйте // для целого числа.

0 голосов
/ 23 октября 2011

Спасибо за все ответы - просто хотел заметить, что я тоже столкнулся с той же проблемой, касающейся PyODE Tutorial 2 (что сделано с pygame); Благодаря примечаниям в этой теме я изменил его, чтобы он работал, и он находится здесь: pyode-pygame-example2.py .

Заметьте, однако, что имеет значение , где вы приводите к int - если у вас есть функция, вычисляющая координаты, вы бы хотели "интегрировать" ее возвращение ("окончательные" координаты), а не его аргументы :) ( ошибка, которую я сделал в сценарии выше )

...