Форум сайта python.su
0
Встретился с довольно странной проблемой. Есть два модуля, один main, второй player.
В main импортировал всё из player'a, и создал экземпляр класса Player() (находиться этот класс в модуле Player). Далее было необходимо ссылаться на методы класса Player (метод moove и render) по средствам экземпляра. Но интерпретатор выдаёт AttributeError, и говорит, что такого атрибута не существует. Не понял проблему вообще, и решения соответственно тоже не нашёл, 2 дня потратил только, но решил сразу обратиться к гуру. Знаю, что непонятно нифига, но после просмотра кода, думаю всё поймете.
# Модуль main import pygame from Constants import * from Player import * # Импорт модуля Player from pygame.locals import * class Main(): def __init__(self, screen): # Конструктор self.screen = screen self.player = Player("Cestuh") # Экземпляр класса Player() self.background = pygame.image.load("images/background.jpg") self.running = True self.main_loop() def handle_events(self): # События for event in pygame.event.get(): if event.type == QUIT: self.running == False elif event.type == KEYDOWN: if event.key == K_RIGHT: self.player.direction = RIGHT self.player.mooving = [1, 0, 0, 0] if event.key == K_DOWN: self.player.direction = DOWN self.player.mooving = [0, 1, 0, 0] if event.key == K_LEFT: self.player.direction = LEFT self.player.mooving = [0, 0, 1, 0] if event.key == K_UP: self.player.direction = UP self.player.mooving = [0, 0, 0, 1] elif event.key == KEYUP: if event.key == K_UP: self.player.mooving[UP] = 0 if event.key == K_DOWN: self.player.mooving[DOWN] = 0 if event.key == K_RIGHT: self.player.mooving[RIGHT] = 0 if event.key == K_LEFT: self.player.mooving[LEFT] = 0 def render(self): # Метод, отвечающий за прорисовку всего self.screen.blit(self.background,(0,0)) self.player.render(screen) # Ссылка на метод render из модуля Player pygame.display.flip() def main_loop(self): # Основной цикл, пока он работает - программа работает тоже while self.running == True: self.player.moove() # Ссылка на метод moove из модуля Player self.render() self.handle_events() pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) game = Main(screen)
# Модуль Player import pygame from Constants import * from pygame.examples.oldalien import PLAYER_SPEED class Player(): def __init__(self, name): # Конструктор self.state = ALIVE self.direction = RIGHT self.x = START_X self.y = START_Y self.name = name self.hp = MAX_HP self.mp = MAX_MP self.image_pack = ["images/archerr.png", "images/archerd.png", "images/archerl.png", "images/archeru.png"] self.images = [] for image in self.image_pack: temp = pygame.image.load(image).convert_alpha() i = [] i.append(temp.subsurface(0, 0, 64, 64)) i.append(temp.subsurface(64, 0, 64, 64)) i.append(temp.subsurface(128, 0, 64, 64)) self.images.append(i) self.mooving = [0, 0, 0, 0] def moove(self): # Метод, отвечающий за движение персонажа if self.mooving[RIGHT] == 1: self.x += PLAYER_SPEED if self.mooving[DOWN] == 1: self.y += PLAYER_SPEED if self.mooving[LEFT] == 1: self.x -= PLAYER_SPEED if self.mooving[UP] == 1: self.y -= PLAYER_SPEED def render(self, screen): # Прорисовка screen.blit(self.images[self.direction][self.state], (self.x, self.y)) def render_ui(self, screen): pass
Офлайн
568
Зачем вы методы внутрь инициализатора запихали?
class Player(): def __init__(self, name): ....... def moove(self): ......
class Player(): def __init__(self, name): ....... def moove(self): ......
Отредактировано FishHook (Авг. 9, 2017 15:21:38)
Офлайн
0
FishHookВы гений.
р
Офлайн