Я впервые задаю вопрос о переполнении стека, поэтому заранее прошу прощения, если мой вопрос слишком расплывчатый или недостаточно информации.
В принципе, проблема в том, что мой кодне запускается из-за ошибки TypeError.
Вот точное сообщение:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.0\src\debug\tserver\_sandbox.py", line 61, in <module>
File "C:\pygamehelper.py", line 62, in mainLoop
File "C:\Program Files (x86)\Wing IDE 101 4.0\src\debug\tserver\_sandbox.py", line 54, in draw
TypeError: integer argument expected, got float
Поэтому я думаю, что ошибка возникает из-за того, что кортеж, связанный с pos, преобразован в вектор с использованиемметод vec2d, а затем передаваемый в качестве аргумента (как число с плавающей точкой) в метод draw.circle в строке 54, где ожидается int.Это то, как это было сделано в учебнике, которому я следую, однако, и его код идентичен и выполняется без проблем.
Может ли это быть из-за того, что он использовал другую версию Python, или PyGame, иличто-то не так с моим кодом?
Заранее спасибо за помощь.
from pygamehelper import *
from pygame import *
from pygame.locals import *
from vec2d import *
from math import e, pi, cos, sin, sqrt
from random import uniform
class Agents:
def __init__(self):
self.pos = vec2d(0, 0)
self.target = vec2d(0, 0)
class Starter(PygameHelper):
def __init__(self):
self.w, self.h = 800, 600
PygameHelper.__init__(self, size=(self.w, self.h), fill=((255,255,255)))
self.agents = []
for i in range(10):
a = Agents()
a.pos = vec2d(uniform(0, self.w), uniform(0, self.h))
a.target = vec2d(uniform(0, self.w), uniform(0, self.h))
self.agents.append(a)
def update(self):
for a in self.agents:
dir = a.target - a.pos
dir.length = 5
a.pos = a.pos + dir
def keyUp(self, key):
pass
def mouseUp(self, button, pos):
for a in self.agents:
a.target = vec2d(pos)
def mouseMotion(self, buttons, pos, rel):
pass
def draw(self):
# clear the screen 40 times / sec so that only 1 char and target
# present on screen at a time
self.screen.fill((255,255,255))
for a in self.agents:
# character
pygame.draw.circle(self.screen, (200, 200, 255), a.pos, 10)
# black character outline
pygame.draw.circle(self.screen, (0, 0, 0), a.pos, 11, 1)
# target
pygame.draw.circle(self.screen, (200, 0, 0), a.target, 20, 1)
s = Starter()
s.mainLoop(40)