2016-12-25 3 views
0
import pygame 
pygame.init() 

width, height = 1000, 700 
window = pygame.display.set_mode((width, height)) 

class Player: 
    def __init__(self, x, y): 
     self.pos_x = x 
     self.pos_y = y 
     self.width, height = 1000, 700 
     self.window = pygame.display.set_mode((width, height)) 

    def player_init(self): 
     sprite = pygame.image.load("Character Sprite.png") 
     self.window.blit(sprite, (self.pos_x, self.pos_y)) 

while 1: 
    Player.player_init(500-38, 350-49) 

Я искал вокруг немного, но я не могу найти ответ, почему этот тип ошибкаTypeError: несвязанный метод player_init() должен быть вызван, например игрока, как первый аргумент (получил Int экземпляр вместо)

TypeError: unbound method player_init() must be called with Player instance as first argument (got int instance instead)

постоянно появляется, когда я создаю класс.

+0

'player_init()' принимает только один аргумент 'self'. Попробуйте 'Player (500-38, 350-49) .player_init()'. – elethan

+0

Примечание: удалите 'while 1', если вы не хотите, чтобы ваш код зависал и работал навсегда. –

ответ

0

Вам необходимо сделать Player(x, y).player_init(), потому что player_init также требует аргумент self, который также использует переменные, указанные в __init__. Вы также вызываете player_init с двумя аргументами, но он принимает только один.

0

Первый (до while) создать экземпляр класса Player с ожидаемыми аргументами

player = Player(500-38, 350-49) 

, а затем использовать его (но без аргументов)

player.player_init() 

Но для меня ваш код должен выглядеть например

import pygame 

# --- constants --- (UPPER_CASE names) 

WIDTH = 1000 
HEIGHT = 700 

# --- classes --- (CamelCase names) 

class Player: 
       # <- empty line to make code more readable 
    def __init__(self, x, y): 
     self.image = pygame.image.load("Character Sprite.png") 
     self.rect = self.image.get_rect() 
     self.rect.x = x 
     self.rect.y = y 

    def draw(self, surface): 
     surface.blit(self.image, self.rect) 

# --- functions --- (lower_case names) 

# empty 

# --- main --- 

# - init - 

pygame.init() 
window = pygame.display.set_mode((WIDTH, HEIGHT)) 

# - objects - 

player = Player(500-38, 350-49) 

# - mainloop - 

while True: 

    # other code 

    player.draw(window) 

self.rect очень полезно установить положение, т.е. self.rect.center и имеет функции для проверки коллизий. player.rect.collidrect(enemy.rect) или player.rect.collidpoint(mouse_pos)

Usefull класс pygame.spripte.Group() ожидает self.rect и self.image автоматически рисовать все спрайты.

0

import pygame 
 

 
# --- constants --- (UPPER_CASE names) 
 

 
WIDTH = 1000 
 
HEIGHT = 700 
 

 
# --- classes --- (CamelCase names) 
 

 
class Player: 
 

 
    def __init__(self, x, y): 
 
     self.image = pygame.image.load("Character Sprite.png") 
 
     self.rect = self.image.get_rect() 
 
     self.rect.x = x 
 
     self.rect.y = y 
 

 
    def draw(self, surface): 
 
     surface.blit(self.image, self.rect) 
 

 
# --- functions --- (lower_case names) 
 

 
# empty 
 

 
# --- main --- 
 

 
# - init - 
 

 
pygame.init() 
 

 
# - objects - 
 

 
player = Player(500-38, 350-49) 
 
player.draw(pygame.display.set_mode((WIDTH, HEIGHT))) 
 

 
# - mainloop - 
 

 

 
while True: 
 
    # other code 
 
    pygame.display.flip() # add to out image from display

Смежные вопросы

 Смежные вопросы