0
Wenn ich ein Objekt in Tkinter erstellt habe, wie kann ich das Objekt selbst zerstören durch eingebetteten Befehl in diesem Objekt? der Code ist so; Ich schreibe ein Spiel, das Münzen sammelt Ich möchte Münzen nach dem Sammeln verschwinden lassen.Python-wie macht man ein Objekt "Selbstmord"?
from tkinter import*
import time
import random
import math
color=['gray','skyblue','orange','green','yellow','blue']
score=[0,0,0,0,0,0]
class Player:
//player class. with wasd keys
class Coin:
def __init__(self,canvas,player,i):
self.Color=color[i]
self.canvas=canvas
self.player=player
self.id=canvas.create_rectangle(10,10,20,15,fill=self.Color,state='normal',width=0)
self.canvas_width=self.canvas.winfo_width()
self.canvas_height=self.canvas.winfo_height()
self.x=random.randint(0,self.canvas_width-50)
self.y=random.randint(0,self.canvas_height-50)
self.canvas.move(self.id,self.x,self.y)
self.i=i
self.GetC=False
def draw(self):
self.canvas.move(self.id,self.x,self.y)
pos=self.canvas.coords(self.id)
if pos[1]<=0:
lv=random.randint(1,3)
self.y=lv*self.i
if pos[3]>=self.canvas_height:
lv=random.randint(-3,-1)
self.y=lv*self.i
if pos[0]<=0:
lh=random.randint(1,3)
self.x=lh*self.i
if pos[2]>=self.canvas_width:
lh=random.randint(-3,-1)
self.x=lh*self.i
if self.hit_player(pos)==True:
self.GetC=True
def hit_player(self,pos):
player_pos=self.canvas.coords(self.player.id)
if pos[2]>=player_pos[0] and pos[0] <=player_pos[2]:
if pos[3]>=player_pos[1] and pos[1]<= player_pos[3]:
return True
return False
def scoring(self):
if self.GetC==True:
score[0]=round(score[0]+0.01*pow(2,self.i),2)
score[self.i]=round(score[self.i]+0.01,2)
self.GetC=False
tk=Tk()
tk.title("GAME")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()
player=Player(canvas,'blue')
coin=[]
for k in range(50):
l=6-int(math.log2(random.randint(2,32)))
coin.append(Coin(canvas,player,l))
inv=canvas.create_text(250,200,text=score,state='hidden')
while 1:
if player.Toggle==True:
canvas.itemconfig(inv,state='normal')
if player.Toggle==False:
canvas.itemconfig(inv,state='hidden')
for k in range(50):
coin[k].scoring()
coin[k].draw()
canvas.itemconfig(inv,text=score)
if player.Q==True:
break
player.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.01)
Wenn die Münzen auf der Leinwand gezeichnet sind, sollten Sie für 'canvas.delete' Methode überprüfen. Ich rate Ihnen auch, 'tk.after' anstelle von' time.sleep' zu verwenden, da das letztere das Fenster während der Ruhezeit nicht mehr anspricht. –