Как начать класс, когда я запускаю программу? - PullRequest
0 голосов
/ 27 марта 2019

Я хочу создать маленькую игру с квадратом, который перемещается. Кто-нибудь знает, как заставить класс начаться при запуске программы?

это класс

class Player:
    def __init__(self, event):
        self.player = self.canvas.create_rectangle(240, 240, 260, 260, 
        fill="blue", outline="dark blue")
        canvasx = canvas.winfo_width()
        canvasy = canvas.winfo_height()
        canvas.bind_all("<KeyPress-Up>", move)
        canvas.bind_all("<KeyPress-w>", move)
        canvas.bind_all("<KeyPress-Down>", move)
        canvas.bind_all("<KeyPress-s>", move)
        canvas.bind_all("<KeyPress-Right>", move)
        canvas.bind_all("<KeyPress-d>", move)
        canvas.bind_all("<KeyPress-Left>", move)
        canvas.bind_all("<KeyPress-a>", move)
    def move(event):
        if event.keysym == "Up" or event.keysym == "w":
            canvas.move(1, 0, -5)
        elif event.keysym == "Down" or event.keysym == "s":
            canvas.move(1, 0, 5)
        elif event.keysym == "Right" or event.keysym == "d":
            canvas.move(1, 5, 0)
        else:
            canvas.move(1, -5, 0)

canvas = Canvas(tk, width=500, height=500, bg="silver")
canvas.pack()

цикл while должен запускать функцию, но не

while True:
    Player.__init__
    Player.move
    tk.update()
    time.sleep(0.01)

1 Ответ

2 голосов
/ 27 марта 2019

Это:

Player.__init__
Player.move
tk.update()
time.sleep(0.01)

- это не то, как вы создаете экземпляр класса.Когда вы помещаете Player.__init__, вы на самом деле не вызываете конструктор.Вы просто заявляете, что оно существует.То же самое с Player.move.Вы должны вызвать метод.Замените эти две строки на:

playerOne = Player(canvas)
playerOne.move()

Теперь playerOne является экземпляром класса Player.

Помимо этого, у вас есть дополнительная проблема в конструкторе Player,

def __init__(self, event):
    self.player = self.canvas.create_rectangle(240, 240, 260, 260, 
    fill="blue", outline="dark blue")

Когда вы ссылаетесь на self.canvas, self.canvas отсутствует.Вы должны назначить его, прежде чем сможете его использовать.И вы, кажется, нигде не используете self.player.Я не совсем уверен, что вы собираетесь с этим, но попробуйте что-то вроде этого:

def __init__(self, canvas):
    self.canvas = canvas.create_rectangle(240, 240, 260, 260, 
    fill="blue", outline="dark blue")

А затем замените определение move метода следующим:

def move(event=None):
    if event == None:
        return
    if event.keysym == "Up" or event.keysym == "w":
        canvas.move(1, 0, -5)
    elif event.keysym == "Down" or event.keysym == "s":
        canvas.move(1, 0, 5)
    elif event.keysym == "Right" or event.keysym == "d":
        canvas.move(1, 5, 0)
    else:
        canvas.move(1, -5, 0)

Определено вне вашего Player класса.

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