2016-11-13 4 views
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) 
+0

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. –

Antwort

0

Hier ist ein einfaches Beispiel, in dem die Münzen verschwinden, wenn der Spieler auf sie klicken:

from tkinter import Tk, Canvas 
from random import random 

root = Tk() 
can = Canvas(root, width=400, height=400, bg="white") 
can.pack() 

def collect(id): 
    can.delete(id) 

for i in range(10): 
    x = random()*380 
    y = random()*380 
    id=can.create_oval(x, y, x+20, y+20, fill="yellow") 
    can.tag_bind(id, "<Button-1>", lambda event, j=id: collect(j)) 

root.mainloop()