Python说我创建的类没有属性



所以我用Pygame在Python中制作了一个Pong风格的游戏,我发现了一些东西。上面说'function' object has no attribute 'x'。我用过的课在这里。请帮帮我,因为我已经很久没有使用Python了,我不知道这个错误意味着什么。

from math import pi, sin, cos
class Vector:
def __init__ (self, x = 0, y = 0):
self.x = x
self.y = y
@classmethod
def random ():
angle = random(0, 2 * pi)
x = cos(angle)
y = sin(angle)
return Vector(x, y)
from Vector import Vector
class Ball:
def __init__ (self, size):
self.position = Vector(size[0] / 2, size[1] / 2)
self.velocity = Vector.random
self.scale = Vector(100, 100)
import pygame
from Ball import Ball
def main ():
pygame.init()
size = (1600, 900)
window = pygame.display.set_mode(size)
pygame.display.set_caption("Pong")
ball = Ball(size)
frameRate = 60
run = True
while run:
pygame.time.delay(int(frameRate / 1000))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill((0, 0, 0))
pygame.draw.rect(window, (255, 255, 255), (ball.position.x, ball.position.y, ball.scale.x, ball.scale.y))
pygame.display.update()
# This is where the error happened.
ball.position.x += ball.velocity.x
ball.position.y += ball.velocity.y
pygame.quit()
if __name__ == "__main__":
main()

您的Vector类有一些错误,正如@juanpa.arrivilaga所说,您通过分配... = Vector.random而不是... = Vector.random()来返回函数引用而不是对象

如果你的代码使用内置的PyGame Vector对象:,它可能会更好

import pygame
import random
import math
class MyVector( pygame.math.Vector2 ):
def __init__( self, x, y ):
super().__init__( x, y )
@staticmethod
def getRandomVector():
angle = random.random() * math.pi
x = math.cos( angle )
y = math.sin( angle )
return MyVector( x, y )

v1 = MyVector( 3, 2 )
v2 = MyVector.getRandomVector()
print( "v1: "+str( v1 ) )
print( "v2: "+str( v2 ) )

对其进行子类以添加您的random()函数。注意使用@staticmethod而不是@classmethod。但是使用继承只创建这个函数似乎增加了一些不必要的复杂性。我想,如果您计划进一步扩展vector,那么当然(基本向量对象已经有很多有用的函数(。

此外,math库没有random()成员函数。但是使用返回0.01.0之间的数字的random.random()函数,很容易修复代码。

相关内容

  • 没有找到相关文章

最新更新