Pygame - математический вектор.Сообщение о расхождениях между заявленными параметрами и фактическими аргументами - PullRequest
0 голосов
/ 16 февраля 2019

Привет всем. Я новичок в python, поэтому я начал следить за YouTubers для создания игр.Я приложил свой код ниже и импортировал Vector2 из PyGame.но проблема в строке 16 self.pos = Vector2(width/2,height/2) и далее.Пихарм подсказывает мне, что аргументы неверны.

Когда я запускаю свою программу, появляется эта ошибка.

self.pos += self.vel + ( 0.5*self.acc.x ) #d = v +0.5` a formula to calculate dist

AttributeError: у объекта 'tuple' нет атрибута 'x'.

Пожалуйста, помогите, спасибо.

импорт pygame в виде pg из настроек import * from pygame.math import Vector2

Класс Player (pg.sprite.Sprite):

def __init__(self):
    pg.sprite.Sprite.__init__(self)
    self.image = pg.Surface((30,40)) #simple sprite
    self.image.fill(yellow) #color of sprite
    self.rect = self.image.get_rect()
    self.rect.center = (width/2,height/2) #centre the sprite
    self.pos = Vector2(width/2, height/2)  #position vector
    self.vel = Vector2(0,0) #velocity vector
    self.acc = Vector2 (0, 0)  #accelaration vector

def update(self):
    self.acc = (0,0)
    keys = pg.key.get_pressed() #if pressed
    if keys[pg.K_LEFT]:
        self.acc.x = -0.5  #accelarate left
    if keys[pg.K_RIGHT]:
        self.acc.x = 0.5  #accelarate right

    self.vel += self.acc #velocity adds to acceleration
    self.pos += self.vel + ( 0.5*self.acc.x ) #d = v +0.5a  formula to calculate dist

    self.rect.center = self.pos  

1 Ответ

0 голосов
/ 16 февраля 2019

В конструкторе атрибут self.acc инициализируется как pygame.math.Vector2.На данный момент self.acc.x является действительным, потому что объект Vector2 имеет атрибут x:

 def __init__(self):

     # [...]

     self.acc = Vector2 (0, 0)  #accelaration vector

Но в методе update кортежу присваиваетсяатрибут self.acc:

def update(self):
    self.acc = (0,0)

Это приводит к ошибке

AttributeError: объект 'tuple' не имеет атрибута 'x'.

при попытке доступа к self.acc.x, поскольку кортеж не имеет атрибута x, конечно:

Замените строку self.acc = (0,0) на self.acc = Vector2(0, 0), чтобы решить проблему:

def update(self):

    self.acc = Vector2(0, 0)

    keys = pg.key.get_pressed() #if pressed
    if keys[pg.K_LEFT]:
        self.acc.x = -0.5  #accelarate left
    if keys[pg.K_RIGHT]:
        self.acc.x = 0.5  #accelarate right

    self.vel += self.acc #velocity adds to acceleration
    self.pos += self.vel + ( 0.5*self.acc.x ) #d = v +0.5a  formula to calculate dist

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