Как управлять перекрывающимися нажатиями клавиш в tkinter python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Как управлять перекрывающимися нажатиями клавиш в tkinter python?

Сообщение Гость »

При попытке воспроизвести Space Invaders в tkinter python я столкнулся с проблемой: когда вы удерживаете клавишу a, перемещая игрока влево, а затем нажимаете пробел, чтобы выстрелить, игрок останавливается, а не продолжает двигаться влево.
Я понятия не имею, как вообще подойти к этой проблеме, поскольку я новичок в Python и tkinter в целом.
Минимальный исполняемый код для воспроизведения проблемы:
р>

Код: Выделить всё

import tkinter

class Projectile():
def __init__(self, x, y) -> None:
self.x = x
self.y = y

def move(self) -> None:
self.y -= 7.5

class Player():
def __init__(self, x, y) -> None:
self.x = x
self.y = y

class World():
def __init__(self) -> None:
self.root = tkinter.Tk()
self.canvas = tkinter.Canvas(self.root, width=800, height=800, bg="black")
self.canvas.pack()

class Game():
def __init__(self) -> None:
self.world = World()
self.player = Player(400, 700)
self.projectile_list = []
self.shooting_allowed = True
self.world.root.bind_all("", self.move)
self.world.root.bind_all("", self.move)
self.world.root.bind_all("", self.shoot)
self.rendered_player = self.world.canvas.create_rectangle(self.player.x, self.player.y, self.player.x+20, self.player.y+20, fill="red")

def move(self, event) -> None:
if event.keysym == "a":
self.player.x -= 10
elif event.keysym == "d":
self.player.x += 10
if self.player.x+25 >= 800:
self.player.x -= 10
elif self.player.x-20  None:
x = self.player.x
y = self.player.y
if self.shooting_allowed:
if event.keysym == "space":
self.projectile_list.append([Projectile(x, y, "player"), self.world.canvas.create_rectangle(x, y, x+4, y+20, fill="red")])

def run(self) -> None:
for projectile in self.projectile_list:
projectile[0].move()
self.world.canvas.coords(projectile[1], projectile[0].x, projectile[0].y, projectile[0].x+4, projectile[0].y+20)
self.world.root.after(10, self.run)

Game = Game()
Game.run()
Game.world.root.mainloop()
Надеюсь на вашу помощь,
Луис

Подробнее здесь: https://stackoverflow.com/questions/781 ... ter-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»