Переменные экземпляра и наследование - PullRequest
0 голосов
/ 29 мая 2019

В настоящее время я пытаюсь вычислить расстояние между классами Image1 и Player в моем main(). Интересующие меня переменные: Bx, By, Px и Py, показанные ниже. В настоящее время я могу получить изображения в окне Pygame, чтобы обновить и распечатать их соответствующие координаты в режиме реального времени. Однако я хотел бы иметь доступ к отдельным переменным, чтобы я мог реализовать переменную расстояния.


class Image1(pygame.sprite.Sprite):
    def __init__(self, img, all_active_sprites):
        super().__init__()

        #scale player image
        self.image = pygame.transform.scale(ImageOne, (100, 100))
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()

        #set spawn location for image
        self.rect.x = random.randrange(25, WINDOWWIDTH - 25)
        self.rect.y = random.randrange(25, WINDOWHEIGHT - 25)

        #set speed/direction
        self.speed_x = random.choice([-1,1])
        self.speed_y = random.choice([-1,1])

    def update(self):
        ''' update Image1 class '''
        self.rect.y += self.speed_y
        self.rect.x += self.speed_x

        #simulate zigzag movement

        "Omitted for Space - Movement Rules"

        #calculate coordinates
        Bx = self.rect.x
        By = self.rect.y
        coordinates_Image1 = (Bx,By)
        print("Image1 Position:",coordinates_Image1)

class Player(pygame.sprite.Sprite):
    def __init__(self, player_img,all_active_sprites):
        super().__init__()
        #scale player image
        self.image = pygame.transform.scale(player_img, (25, 25))
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()

        #player starting location
        self.rect.x = WINDOWWIDTH / 2
        self.rect.y = WINDOWHEIGHT/ 2

        #player speed
        self.speed_x = 0
        self.speed_y = 0

    def update(self):
        '''update the Player class'''
        #arrow controls
        "Omitted for Space - Key Commands"

        #update movement, stop at boundaries
        self.rect.x += self.speed_x
        self.rect.y += self.speed_y

        "Omitted for Space - Movement Rules"

        #calculate coordinates
        Px = self.rect.x
        Py = self.rect.y
        coordinates_player = Px,Py
        print("Player Position:",coordinates_player)

Я думал, что мне нужно было найти способ доступа к этим переменным экземпляра за пределами локали, поэтому в качестве решения я попытался сделать следующее. Я разделил координаты на их собственные функции внутри каждого класса, вдали от вычислений движения. Затем в моем main() я создал экземпляр для каждого класса, например p = Player(args). Затем я вызвал функции координат из моего main(), и парные координаты (x, y) распечатались бы, как и раньше, но я все еще не мог получить доступ / распечатать нужные переменные. Не уверен, что я делаю не так. Спасибо и выздоровления!

1 Ответ

0 голосов
/ 29 мая 2019

Переменные Px и Py находятся только в области видимости в функции update().Они называются «локальными переменными».С другой стороны, у вас есть переменная с именем p, которая представляет игрока целиком.У него есть поле p.rect, которое является его ограничительным прямоугольником.И оттуда вы можете получить доступ к p.rect.x и p.rect.y.

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