Как может запускаться класс при запуске программы?

#python #tkinter

#python #tkinter

Вопрос:

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

это класс

 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. Отсутствуют только параметры imports и tkinter basics

3. Player.__init__ не вызывает саму функцию, и прямой вызов __init__ не является правильным способом создания экземпляра Player . Пожалуйста, прочтите хорошую книгу по ООП на Python, прежде чем пытаться закодировать свой собственный класс.

4. Если вы выполните поиск по фразе «Перемещение объекта Pygame», вы найдете ресурсы, которые могут объяснить это намного лучше, чем мы можем в ответе здесь. Я ожидаю, что то, что вы хотите, называется «sprite».

5. class — Это не исполняемый объект, который можно «запустить»: это контейнер для данных и методов, которые работают вместе, чтобы инкапсулировать концепцию программирования. Вы можете вызвать метод класса … но вам нужен независимо перемещаемый значок. Изучите больше руководств по игровой анимации, чтобы получить необходимые концепции. У вас есть базовая структура; я ожидаю, что проработка будет для вас быстрой.

Ответ №1:

Это:

 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 класса.

Комментарии:

1. Файл «C:UsersvitoaDesktoptkinter.py «, строка 12, в инициализации self.player = self.canvas.create_rectangle(240, 240, 260, 260, fill =»blue», outline = «темно-синий») Ошибка атрибута: объект ‘Player’ не имеет атрибута ‘canvas’

2. Вы пытались его запустить?