Beim Picking werden alle Behaviors angesprochen

Status
Nicht offen für weitere Antworten.

Illuvatar

Top Contributor
Also, ich hab im Universe viele Spheres, um die dann noch über OrientedShape3D Texte kreisen.
Eine solche Sphere mit Text wird von einem Objekt des Typs MindMapNode dargestellt, was aus BranchGroup abgeleitet ist, diese Groups werden dann direkt zum BranchGraph hinzugefügt.

Ausschnitte aus dem Konstruktor:
Code:
	protected MindMapNode (Point3f loc, Color c, String name, MindPanel myPan)
	{
[...]
		Sphere s = new Sphere();
[...]
		Transform3D t3d = new Transform3D ();
		t3d.setTranslation (new Vector3f (loc.x, loc.y, loc.z));
		TransformGroup tg = new TransformGroup (t3d);
		this.addChild(tg);
[...]
		s.setPickable(true);
		Picker p = new Picker();
		s.setCapability(ENABLE_PICK_REPORTING);
		tg.addChild(p);
		tg.addChild(s);
Und die Klasse Picker:
Code:
	private class Picker extends PickMouseBehavior
	{
		Picker ()
		{
			super (MindMapNode.this.myPan.getCanvas()/*Canvas*/, MindMapNode.this, new BoundingSphere (new Point3d(), 1)/*Default-Radius einer Sphere*/);
			setSchedulingBounds (new BoundingSphere (new Point3d(), 500)); //View ist bis zu 300 Meters weg
			pickCanvas.setMode(PickCanvas.GEOMETRY);
		}
		public void updateScene (int x, int y)
		{
			System.out.println ("PICKED: " + MindMapNode.this + " with coordinates: (" + x + "/" + y + ")!"); //Testausgabe
		}
	}

Das Problem ist: Egal, wohin ich klicke, machen alle Picker-Instanzen ihre Ausgabe. Wo liegt der Fehler?

PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden: http://www.java-forum.org/de/viewtopic.php?t=7140 :wink:
 
Warum zum Geier erzeugst du so viele Pick-Objeke? Entsprechend ihrem Scope (oder Einflussbereich, ich habe mir deinen Code jetzt nicht näher angesehen), müssen die ja alle reagieren! Ich würde nur ein Pick-Objekt erzeugen und dann fix das ge"pick"te Objekt auffinden. Ressourcenschonender ist die Variante gewiss.

> PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden:
> http://www.java-forum.org/de/viewtopic.php?t=7140

Permanentes Spammen führt ganz gewiss zu einer Lösung :-(
 
Oxygenic hat gesagt.:
> PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden:
> http://www.java-forum.org/de/viewtopic.php?t=7140

Permanentes Spammen führt ganz gewiss zu einer Lösung :-(

Jaja ... 🙁

Also, zu dem Problem.
Es kann gut sein, dass ich das Picking noch gar nicht bis kaum verstanden habe.
Das hier hat übrigens auch nicht wirklich weitergeholfen.
Ich will nur wissen, wenn der User die Maus klickt, auf welche Sphere er geklickt hat. Das sollte doch nicht allzu schwer sein. ???:L Kann mir da jemand nen Tip geben?
 
Ähm...zu jedem Pick-Result bekommst du einen Rückgabewert, aus dem du dann das gepickte Objekt ermitteln kannst. Das J3D-Tutorial von javacore.de beschreibt dieses Verfahren übrigens detailliert.
 
Ups ... jetzt darf mich jeder einmal schlagen ... (virtuell)
wallbash.gif


Ich hatte es schon mal fast. Es hat nur gefehlt, dass ich Sphere im Konstruktor den Primflag ENABLE_GEOMETRY_PICKING mitgeben muss, damit ALLOW_INTERSECT gesetzt wird.

Und dann hab ich immer abstrusere Sachen eingebaut... Jetzt klappt alles super.

PS: @Oxygenic Ich hatte mir das Tut vorher noch nicht so genau angeschut, das scheint ja echt gut zu sein.
Ich tus mal in die Linkbase 😀
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben