Я понятия не имею, как вообще подойти к этой проблеме, поскольку я новичок в 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