0
tkinterでオブジェクトを作成したとき、そのオブジェクトに組み込みコマンドを使ってオブジェクトを破壊する方法を教えてください。 コードはこのようです。私はコインを収集するゲームをコーディングしています コインを収集した後で消滅させたいと思います。ここでpython - オブジェクトを '自殺'にする方法は?
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)
を、あなたは 'canvas.delete'方法を確認する必要があります。スリープ時間中にウィンドウが応答しなくなるので、 'time.sleep'の代わりに' tk.after'を使うことをお勧めします。 –