Canvas Objekte "bemerken"

Fragen zu Tkinter.
Antworten
Maximilianibus
User
Beiträge: 43
Registriert: Samstag 13. Februar 2010, 18:14
Wohnort: Sauerbratenserver

Ich denke mal, dass das hier reingehört, also rein damit.
Ich progge mit nem freund ein programm, so eine art virtuelle petrischale.
Jetzt haben wir ein problem: mutation usw. haben wir schon ausgeklügelt, aber beim "bemerken" von anderen objekten haperts.
habe schon was zur kollisionserkennung gefunden.
jetzt zum problem:
wie kann man es machen, dass z.b. ein kreis "daliegt" und x pixel weiter ein "futterteilchen" liegt, und der kreis sich darauf zubewegt.
Hilfe!?
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

es gibt die Möglichkeit mit canvas.move(item, x-verschiebung, y-verschiebung) ein Objekt zu bewegen.

Im Zusammenhang mit -after(...) kannst du es wie eine Bewegung aussehen lassen.
Maximilianibus
User
Beiträge: 43
Registriert: Samstag 13. Februar 2010, 18:14
Wohnort: Sauerbratenserver

ich weiss, wie ich es bewege.
aber wie erkenne ich das objekt? das ziel?
BlackJack

@Maximilianibus: Den Abstand von Deinem "Organismus" zu allen Futterteilchen ausrechnen und dann auf das zubewegen was am nächsten ist!? So etwas sollte man unabhängig von der GUI implementieren. Sonst ist Deine Simulation ja von `Tkinter` abhängig.
Maximilianibus
User
Beiträge: 43
Registriert: Samstag 13. Februar 2010, 18:14
Wohnort: Sauerbratenserver

ja, ich werde mal schauen.
apropos, können mehrere python-skripte irgendwwelche parameter austauschen?
BlackJack

@Maximilianibus: Das wäre eher eine neue Frage für einen neuen Thread. Die Antwort ist ja.
Maximilianibus
User
Beiträge: 43
Registriert: Samstag 13. Februar 2010, 18:14
Wohnort: Sauerbratenserver

danke trotzdem.
problembär

Wie war das noch ...

Die .create_...-Methoden geben eine Zahl zurück.
Das ist eine Id. Die kann man für

Code: Alles auswählen

pydoc Tkinter.Canvas.find_all
usw. verwenden.
Eine Id, sie zu finden, sie alle zu knechten,
ins Dunkel zu treiben und ewig zu binden.
sozusagen :) ...

Mehrere Items kann man auch mit einem Tag versehen.
Im Prinzip kann man so auf jedes Item auf dem Canvas zugreifen.

Gruß
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Pascal hat geschrieben:Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Kann sein, ist aber höchstens die zweitbeste Lösung.
BlackJack hat schon darauf hingewiesen, dass es sinnvoll ist, diese Erkennung von der graphischen Darstellung zu trennen. Praktisch könnte das so aussehen, dass man vom Kreis den Mittelpunkt und den Radius kennt und von jedem Futterteilchen die Position (und, falls es nicht als Punkt gedacht ist, die Bounding-Box oder Radius oder was weiß ich). Aus diesen Information lässt sich dann jederzeit das nächstgelegten Futterteilchen ermitteln - ganz ohne graphische Darstellung.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

numerix hat geschrieben:
Pascal hat geschrieben:Vielleicht könnte dir auch die canvas.find_overlapping() - methode helfen
Kann sein, ist aber höchstens die zweitbeste Lösung.
BlackJack hat schon darauf hingewiesen, dass es sinnvoll ist, diese Erkennung von der graphischen Darstellung zu trennen. Praktisch könnte das so aussehen, dass man vom Kreis den Mittelpunkt und den Radius kennt und von jedem Futterteilchen die Position (und, falls es nicht als Punkt gedacht ist, die Bounding-Box oder Radius oder was weiß ich). Aus diesen Information lässt sich dann jederzeit das nächstgelegten Futterteilchen ermitteln - ganz ohne graphische Darstellung.
ja, das ist schon richtig. Aber wenn´s nichts aufwendiges oder umfangreiches werden soll, dann ist man mit find_overlapping eigentlich gut dabei.
Antworten