Hallo alle.
Ich habe ein Problem und benötige mal Inspirationen für eine Fehlersuche. Ich poste keinen Code, da es erstmal um theoretische Überlegungen geht.
Ich schreibe ein Programm, in dem mit OpenGL Kugeln in einem View dargestellt werden.
Diese Kugeln bewegen sich, wenn ich auf einen Button des Views drücke. Es passiert zweierlei: Meine Klasse XY, die eine Liste der Kugel-Objekte enthält, berechnet die neuen Positionen in einem Zeitintervall. Diese Berechnung erfolgt mittels eines Timers, von dem aus die Berechnungsroutine von XY für alle Kugeln aufgerufen wird. Wenn ich auf den Stop-Button des Views drücke, wird der Timer gelöscht.
Gleichzeitig passiert folgendes: Da die Animation mit Knopfdruck startet, hänge ich den CVDisplaylink ein. Wenn ich auf Stop drücke, wird er wieder "ausgehängt".
Soweit so gut. Ihr werdet es nicht glauben, alles funktioniert tadellos.
Ich habe auch eine kleine Routine für Color Picking geschrieben. Ein MouseDown über meinem View wird weitergeleitet an den Controller des Views. Die Kugeln werden im Backbuffer gezeichnet usw. Die ausgewählte Kugel erhält einen WireCube drumrum.
Ich kann also zig mal Play und Stop drücken und es läuft wie erwünscht. Sobald ich aber mit der Maus eine Kugel anwähle und wie gewünscht der WireCube um sie gezeichnet wird, funktioniert der Displaylink nicht mehr. Ich kann also Kugeln auswählen, die eine, und danach die andere, es wird auch der Wechsel gezeichnet, aber wenn ich dann auf Play drücke, bewegt sich nichts mehr. Trotzdem weiß ich, dass die Berechnung der Kugeln durch den Timer weiterläuft. Ich kann durch einen Button auch ein einmaliges Neuzeichnen des Views erzeugen (hilfsweise) und sehe dann die veränderten Positionen. Wenn ich dann auf Stop drücke und der Displaylink wird "ausgehängt" (kenne nicht den richtigen Begriff!), hängt sich das Programm auf und das wars. Offensichtlich scheint also etwas mit dem Displaylink nicht mehr zu funktionieren, sobald ich mit der Maus auf das View geklickt habe und meine Color Picking Routine gestartet hat.
Ich weiß, dass solche theoretischen Dinge immer schwierig sind, aber ich habe keinen Plan, wo ich nach dem Fehler suchen soll.
Vielleicht hat ja jemand eine Idee. Wenn noch Infos benötigt werden, sagt Bescheid. Und schon mal Danke.
Ich habe ein Problem und benötige mal Inspirationen für eine Fehlersuche. Ich poste keinen Code, da es erstmal um theoretische Überlegungen geht.
Ich schreibe ein Programm, in dem mit OpenGL Kugeln in einem View dargestellt werden.
Diese Kugeln bewegen sich, wenn ich auf einen Button des Views drücke. Es passiert zweierlei: Meine Klasse XY, die eine Liste der Kugel-Objekte enthält, berechnet die neuen Positionen in einem Zeitintervall. Diese Berechnung erfolgt mittels eines Timers, von dem aus die Berechnungsroutine von XY für alle Kugeln aufgerufen wird. Wenn ich auf den Stop-Button des Views drücke, wird der Timer gelöscht.
Gleichzeitig passiert folgendes: Da die Animation mit Knopfdruck startet, hänge ich den CVDisplaylink ein. Wenn ich auf Stop drücke, wird er wieder "ausgehängt".
Soweit so gut. Ihr werdet es nicht glauben, alles funktioniert tadellos.
Ich habe auch eine kleine Routine für Color Picking geschrieben. Ein MouseDown über meinem View wird weitergeleitet an den Controller des Views. Die Kugeln werden im Backbuffer gezeichnet usw. Die ausgewählte Kugel erhält einen WireCube drumrum.
Ich kann also zig mal Play und Stop drücken und es läuft wie erwünscht. Sobald ich aber mit der Maus eine Kugel anwähle und wie gewünscht der WireCube um sie gezeichnet wird, funktioniert der Displaylink nicht mehr. Ich kann also Kugeln auswählen, die eine, und danach die andere, es wird auch der Wechsel gezeichnet, aber wenn ich dann auf Play drücke, bewegt sich nichts mehr. Trotzdem weiß ich, dass die Berechnung der Kugeln durch den Timer weiterläuft. Ich kann durch einen Button auch ein einmaliges Neuzeichnen des Views erzeugen (hilfsweise) und sehe dann die veränderten Positionen. Wenn ich dann auf Stop drücke und der Displaylink wird "ausgehängt" (kenne nicht den richtigen Begriff!), hängt sich das Programm auf und das wars. Offensichtlich scheint also etwas mit dem Displaylink nicht mehr zu funktionieren, sobald ich mit der Maus auf das View geklickt habe und meine Color Picking Routine gestartet hat.
Ich weiß, dass solche theoretischen Dinge immer schwierig sind, aber ich habe keinen Plan, wo ich nach dem Fehler suchen soll.
Vielleicht hat ja jemand eine Idee. Wenn noch Infos benötigt werden, sagt Bescheid. Und schon mal Danke.