Pygame AttributeError: класс User_Ship не имеет атрибута «прямоугольный»

Я делаю клон космических захватчиков и у меня проблемы. Итак, прямо сейчас у меня есть управляемый пользователем корабль (в настоящее время это мышь, потому что это то, что было в моей папке python из предыдущей игры, но со временем я это изменю), перемещающийся вперед и назад в нижней части экрана, что я и хочу, но у меня проблемы со стрельбой, когда я нажимаю пробел. Я могу запустить игру, но когда я нажимаю пробел, я получаю эту ошибку:

AttributeError: класс User_Ship не имеет атрибута «прямой»

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

from pygame import *
import pygame

size_x = 900
size_y = 650

class Object:
    def disp(self, screen):
        screen.blit(self.sprite, self.rect)

class User_Ship(Object):
    def __init__(self):
        self.sprite = image.load("mouse.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx = size_x/2
        self.rect.centery = size_y - 40
        self.count = 0
        self.move_x = 0
        self.move_y = 0

    def checkwith(self, otherrect):
        if self.rect.colliderect(otherrect):
            exit()

    def cycle(self):
        self.rect.centerx += self.move_x
        if self.rect.centerx < 0:
            self.rect.centerx = 0
        if self.rect.centerx > size_x:
            self.rect.centerx = size_x

        self.rect.centery += self.move_y
        if self.rect.centery < 0:
            self.rect.centery = 800

    def right(self):
        self.move_x += 10

    def left(self):
        self.move_x -= 10

    def stop_x(self):
        self.move_x = 0

    def stop_y(self):
        self.move_y = 0

class Missile(Object):
    def __init__(self):
        self.sprite = image.load("missile.png")
        self.rect = self.sprite.get_rect()

    def update(self):
        self.rect.move_ip(self.speed)
        if self.rect.left < 0 or self.rect.right > size_x or self.rect.top < 0 or self.rect.bottom > size_y:
            self.kill()

missiles = pygame.sprite.RenderUpdates()


init()
screen = display.set_mode((size_x, size_y))
m = User_Ship()
#b = Missile()
clock = time.Clock()

while True:
    for e in event.get():
        if e.type == QUIT:
            quit()
        if e.type == KEYDOWN:
            if e.key == K_RIGHT:
                m.right()
            elif e.key == K_LEFT:
                m.left()
            if (e.key == K_SPACE):
                missiles.add(Missile("missile.png",(User_Ship.rect.centerx)))
        if e.type == KEYUP:
            if e.key == K_RIGHT or e.key == K_LEFT:
                m.stop_x()

    missiles.draw(screen)
    m.cycle()
    screen.fill((255,255,255))
    m.disp(screen)
#   b.disp(screen)
    display.flip()

person user2817437    schedule 13.11.2013    source источник


Ответы (1)


rect — это не атрибут класса, а атрибут экземпляра. Итак, вы можете получить к нему доступ следующим образом

missiles.add(Missile("missile.png",(m.rect.centerx)))
person thefourtheye    schedule 13.11.2013
comment
Это неловко ... удалив мой ответ, вы меня опередили. - person jramirez; 13.11.2013