Создание цикла игровой анимации в Tkinter Python
господа программисты! Я создаю на Python с помощью Tkinter игру. Я бьюсь над проблемой бесконечнего вызова функции luch() и отображаения результата вызова функции на экране. Помогите пожалуйста. Вот код игры:
from tkinter import *
from tkinter import messagebox
from threading import Thread
from playsound import playsound
import sys
import time
import threading
kill_boss=False
robot_health = 100
def attack():
global robot_health,kill_boss
if robot_health==0:
kill_boss=True
else:
robot_health-=1
kill = False
fight = Tk()
fight['bg']='black'
fight.geometry("400x400")
fight.title('Битва')
w = 500
h=500
Canvas = Canvas(bg='black')
Canvas.pack()
def kot(a):
messagebox.showinfo('Заголовок',a)
global a1
global a2
global d1
global d2
a1= 15
a2=15
d1=25
d2=25
player = Canvas.create_rectangle(a1,a2,d1,d2,fill='red')
Button(fight,bg='red',comand=attack()).pack()
def down():
global a1
global a2
global d1
global d2
Canvas.move(player,0,10)
d2=+1
c2=+1
def up():
global a1
global a2
global d1
global d2
Canvas.move(player,0,-10)
d2=-10
c2-=10
def left():
global a1
global a2
global d1
global d2
Canvas.move(player,-10,0)
c1=-10
d1-=10
def right():
global a1
global a2
global d1
global d2
Canvas.move(player,10,0)
c1=+10
d1=+10
def luch(x1,x2,y1,y2):
Canvas.create_rectangle(x1,x2,y1,y2,fill='white')
'''if a1>x1 and a1 <y1 and a2>x2 and d2 < y2:
kot("game_over")
time.sleep(3)
sys.exit()'''
time.sleep(2)
Canvas.create_rectangle(x1,x2,y1,y2,fill='black')
photo = PhotoImage(file = "1 враг.gif")
label = Label(image = photo).pack()
w.bind("<Up>", lambda event:up)
w.bind("<Left>", lambda event:left)
w.bind("<Right>", lambda event:right)
w.bind("<Down>", lambda event:down)
fight.mainloop()
Ответы (2 шт):
Автор решения: Stanislav
→ Ссылка
Довольно стандартное решение для игр, год да есть тики. Запуск раз в секунду или как настроите.
from Tkinter import *
from random import randint
frm = Tk()
lab = Label(root)
lab.pack()
def tick():
lab.config(text = randint(10,99)) # здесь можно вызывать функции
frm.after(1000, tick)# запускает себя каждую секунду
# запускается один раз
tick()
frm.mainloop()