Проработка Python Cra sh Курс: NameError: 'self' не определен - PullRequest
0 голосов
/ 18 июня 2020
import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    '''A class to manage bullets fired from the ship.'''

    def __init__(self, ai_game):
        '''Create a bullet object at the ship's current position'''
        super().__init__()
        self.screen = ai_game.screen
        self.settings = ai_game.settings
        self.color = self.settings.bullet_color

    # Create a bullet rect at (0, 0) and then set correct position. THIS LINE IS THE ISSUE. I GET TRACEBACK TO THIS LINE AND SAYS SELF NOT DEFINED.
    self.rect = pygame.Rect(0, 0, self.settings.bullet_height, self.settings.bullet_width)
    self.rect.midtop = ai_game.ship.rect.midtop

    # Store the bullet's position as a decimal value.
    self.x = float(self.rect.x)

    def update(self):
        '''Move the bullet up the screen.'''
        # Update the decmimal position of the bullet
        self.x -= self.settings.bullet_speed
        # Update the rect position.
        self.rect.x = self.x

    def draw_bullet(self):
        '''Draw the bullet to the screen'''
        pygame.draw.rect(self.screen, self.color, self.rect)

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Поскольку Python не содержит {}, как в других популярных языках, важен отступ:

import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    '''A class to manage bullets fired from the ship.'''

    def __init__(self, ai_game):
        '''Create a bullet object at the ship's current position'''
        super().__init__()
        self.screen = ai_game.screen
        self.settings = ai_game.settings
        self.color = self.settings.bullet_color

        # Create a bullet rect at (0, 0) and then set correct position. THIS LINE IS THE ISSUE. I GET TRACEBACK TO THIS LINE AND SAYS SELF NOT DEFINED.
        self.rect = pygame.Rect(0, 0, self.settings.bullet_height, self.settings.bullet_width)
        self.rect.midtop = ai_game.ship.rect.midtop

        # Store the bullet's position as a decimal value.
        self.x = float(self.rect.x)

    def update(self):
        '''Move the bullet up the screen.'''
        # Update the decmimal position of the bullet
        self.x -= self.settings.bullet_speed
        # Update the rect position.
        self.rect.x = self.x

    def draw_bullet(self):
        '''Draw the bullet to the screen'''
        pygame.draw.rect(self.screen, self.color, self.rect)
0 голосов
/ 18 июня 2020

Вы забыли некоторые отступы, поэтому некоторые переменные были инициализированы вне if __init__()

python pygame
import pygame
from pygame.sprite import Sprite

class Bullet(Sprite):
    '''A class to manage bullets fired from the ship.'''

    def __init__(self, ai_game):
        '''Create a bullet object at the ship's current position'''
        super().__init__()
        self.screen = ai_game.screen
        self.settings = ai_game.settings
        self.color = self.settings.bullet_color

        # Create a bullet rect at (0, 0) and then set correct position. THIS LINE IS THE ISSUE. I GET TRACEBACK TO THIS LINE AND SAYS SELF NOT DEFINED.
        self.rect = pygame.Rect(0, 0, self.settings.bullet_height, self.settings.bullet_width)
        self.rect.midtop = ai_game.ship.rect.midtop

        # Store the bullet's position as a decimal value.
        self.x = float(self.rect.x)

    def update(self):
        '''Move the bullet up the screen.'''
        # Update the decmimal position of the bullet
        self.x -= self.settings.bullet_speed
        # Update the rect position.
        self.rect.x = self.x

    def draw_bullet(self):
        '''Draw the bullet to the screen'''
        pygame.draw.rect(self.screen, self.color, self.rect)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...