【问题标题】:When moving tkinter object other image disappears移动 tkinter 对象时,其他图像消失
【发布时间】:2015-05-25 23:52:18
【问题描述】:

这两个项目都可以正常移动,但是,每当我使用绑定到事件处理程序的键时,另一个图像(敌人)将消失,直到我停止使用键移动播放器。有没有解决的办法?我也尝试过 canvas 方法 .move 并尝试搜索没有从我尝试的搜索中找到解决方案。

def move_player(self, event):
    if event.keysym.lower() == "a":
        self.player_x -= self.player_delta_x
    if event.keysym.lower() == "d":
        self.player_x += self.player_delta_x
    self.canvas.delete(self.player)
    self.make_player()

def move_enemy(self):

    self.enemy_x += self.enemy_delta_x
    self.enemy_y -= self.enemy_delta_y

    #Keep the enemy within the bounds of the screen
    if self.enemy_x > self.width - self.enemy_radius:
        self.enemy_delta_x *= -1

    if self.enemy_x < 0:
        self.enemy_delta_x *= -1

    if (self.enemy_y >= height / 2 or 
        self.enemy_y <= 0 + self.enemy_radius):

        self.enemy_delta_y *= -1

    self.canvas.delete(self.enemy)
    self.make_enemy()


if __name__ == "__main__":
    root = tk.Tk()
    canvas = tk.Canvas(root, bg = "black")
    width = root.winfo_screenwidth()

    height = root.winfo_screenheight() - TASKBAR_OFFSET
    root.geometry("%dx%d" % (width, height))
    game = Game(root, canvas, width, height)
    game.make_menu()
    game.make_background()
    game.make_player()
    game.make_enemy()
    while True:
        game.move_enemy()
        game.canvas.update()
        time.sleep(0.025)
    root.mainloop()

【问题讨论】:

  • 发现需要删除移动播放器功能中的 self.canvas.delete

标签: python class python-3.x canvas tkinter


【解决方案1】:

首先,不要使用while True 循环,而是使用root.after(0, animateFunction)

然后在 animate 函数内部:

def animateFunction():

#Movement Code
moveEnemyFunction()
checkPlayerMovement()

root.after(animateFunction, 10)

如果你这样循环,它应该在每一帧完成移动任务并最终移动玩家而不会失去玩家移动的每一帧敌人。 现在,不能保证这会起作用,因为我不知道你的动作是如何工作的以及你是如何绑定它的,但我相信这应该可以解决你的问题。

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2014-03-16
    • 2017-10-18
    • 2023-04-09
    • 2021-12-26
    相关资源
    最近更新 更多