Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 移动tkinter对象时,其他图像将消失_Python_Class_Python 3.x_Canvas_Tkinter - Fatal编程技术网

Python 移动tkinter对象时,其他图像将消失

Python 移动tkinter对象时,其他图像将消失,python,class,python-3.x,canvas,tkinter,Python,Class,Python 3.x,Canvas,Tkinter,这两个项目都会移动良好,但是,每当我使用事件处理程序的绑定键时,另一个图像(敌人)将消失,直到我停止移动带键的玩家。有办法解决这个问题吗?我尝试了canvas方法。移动和尝试搜索在我尝试的搜索中未找到解决方案 def move_player(self, event): if event.keysym.lower() == "a": self.player_x -= self.player_delta_x if event.keysym.lower() == "d"

这两个项目都会移动良好,但是,每当我使用事件处理程序的绑定键时,另一个图像(敌人)将消失,直到我停止移动带键的玩家。有办法解决这个问题吗?我尝试了canvas方法。移动和尝试搜索在我尝试的搜索中未找到解决方案

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()
def move_播放器(自身,事件):
如果event.keysym.lower()=“a”:
self.player_x-=self.player_delta_x
如果event.keysym.lower()=“d”:
self.player_x+=self.player_delta_x
self.canvas.delete(self.player)
self.make_player()
def移动敌人(自身):
self.敌军_x+=self.敌军_delta_x
self.敌军_y-=self.敌军_delta_y
#将敌人控制在屏幕范围内
如果self.defect_x>self.width-self.defect_半径:
self.敌军_delta_x*=-1
如果self.敌我_x<0:
self.敌军_delta_x*=-1
如果(self.敌我>=高度/2或

self.friend_y首先,不要在True时使用
循环,而是使用
root.after(0,animateFunction)

然后在动画功能的内部:

def animateFunction():

#Movement Code
moveEnemyFunction()
checkPlayerMovement()

root.after(animateFunction, 10)
如果你这样循环,它应该在每一帧完成移动任务,并最终移动玩家,而不会在玩家移动的每一帧丢失敌人。
现在,无法保证这会起作用,因为我不知道你的移动是如何工作的,也不知道你是如何绑定的,但我相信这会解决你的问题。

找到了在移动播放器功能中删除self.canvas.delete所需的方法