2017-03-26 5 views
1

Ich mache ein kleines Alien-Projekt, um Grafiken in Tkinter lernen zu helfen, und ich bin auf ein Problem gestoßen. Ich versuche, den Alien-Augapfel im Auge zu halten, aber ich bewege mich immer noch, aber das erfordert, dass ich den Rand des Augapfels erkenne, der ein Kreis ist. Nicht wirklich sicher, wie coords in tkinter (außer den Grundlagen) arbeiten, so dass jede Hilfe geschätzt wird. Vielen Dank!Tkinker Umfang eines Kreises Coords Umgang mit Python 3

from tkinter import * 
from threading import Timer 
import random 
import time 
global canvas, root 

root = Tk() 
root.title("Alien") 
root.attributes("-topmost", 1) 

canvas = Canvas(root, height=300, width =400) 
canvas.pack() 
Blinking = False 

class Alien: 
    def __init__(self): 
     global canvas, root 
     self.body = canvas.create_oval(100,150,300,250, fill = "green") 
     self.eye = canvas.create_oval(170,70,230,130, fill = "white") 
     self.eyeball = canvas.create_oval(190,90,210,110, fill = "black") 
     self.mouth = canvas.create_oval(150,220,250,240, fill = "red") 
     self.neck = canvas.create_line(200,150,200,130) 
     self.hat = canvas.create_polygon(180,75,220,75,200,20, fill = "blue") 
     self.words = canvas.create_text(200,800, text = "I'm an alien!", anchor="nw") 
     root.update() 

    def openMouth(self): 
     global canvas, root 
     canvas.itemconfig(self.mouth, fill = "black") 
     root.update() 
    def closeMouth(self): 
     global canvas, root 
     canvas.itemconfig(self.mouth, fill = "red") 
     root.update() 

    def burp(self, event): 
     self.openMouth() 
     canvas.itemconfig(self.words, text = "BURRRRP!") 
     time.sleep(0.5) 
     self.closeMouth() 
    def moveEye(self,event): 
     global root, canvas 
     canvas.move(alien.eyeball , random.randint(-1,1) , random.randint(-1,1)) 
     root.update() 

    def blink(self,event): 
     canvas.itemconfig(self.eye, fill = "green") 
     canvas.itemconfig(self.eyeball, state=HIDDEN) 
     Blinking = True 
     root.update() 
    def unblink(self,event): 
     canvas.itemconfig(self.eye, fill = "white") 
     canvas.itemconfig(self.eyeball, state=NORMAL) 
     Blinking = False 
     root.update() 



alien = Alien() 
alien.openMouth() 
time.sleep(1) 
alien.closeMouth() 
canvas.bind_all("<Button-1>", alien.burp) 
canvas.bind_all("<KeyPress-a>", alien.blink) 

Timer(2, alien.moveEye).start() 
while not Blinking: 
    alien.moveEye(event) 
    if alien.moveEye.event.x > 190: 
     canvas.move(alien.eyeball, -1 , 0) 
+0

Könnten Sie echtes Problem in geometrischen Begriffen erklären? (Ich habe noch nie Alien gesehen :)) – MBo

+0

Ein Kreis bewegt sich mit einem zufälligen Algorithmus innerhalb eines anderen Kreises und ich muss Parameter einstellen, damit er nicht aus dem Kreis entkommen kann. Also vielleicht eine Gleichung, um die Koordinaten für den Umfang zu erfassen (die Quadratwurzel von r im Quadrat minus x Quadrat?)? Vielen Dank :) –

Antwort

0

Kleiner Kreis mit dem Radius r mit dem Radius R innerhalb des großen Kreises liegt, wenn

(BigCenter.X - SmallCenter.x)^2 + (BigCenter.Y - SmallCenter.Y)^2 < (R - r)^2 

^2 Wert

Quadrat bezeichnet
Verwandte Themen