# BranchGroup ändern



## Highchiller (4. Jul 2011)

Hallöchen, ich habe noch ein recht nerviges Problem.

Es dreht sich immernoch alles um das Spiel "Hive".
Folgendes, wenn ein Spielstein gelegt wird, muss das ja aktualisiert werden. Das geschieht über eine update() Methode. ABER um dieses Update sichtbar zu machen, muss ich momentan noch das ganze Universum neu erstellen und alles aufbauen. Das führt dazu, dass beim ziehen kurz alles verschwindet und dann auftaucht, wenn er alles neu berechnet hat.

Auf einen Punkt gebracht, wie schaffe ich es, meine BranchGroup im laufenden Programm zu ändern.

Für das verständnis:
* BranchGroup RootBG ist die BG die in das Universum gehängt wird.
* Dann gibt es Lichter (AmbientLight, DirectionalLight, PointLight, SpotLight) die an RootBG gehangen werden.
* Hinzu kommt ein Hintergrund (Background) der ebenfalls ans RootBG gehangen wird
* Jetzt wirds wichtig, es gibt eine TransformGroup (namens PiecesTG) diese enthält mehrere TransformGroups (namens PieceGraph3D) welche die einzelnen Spielsteine beinhaltet. Diese PieceGraph3D's werden in die PiecesTG gehangen, die wiederrum in die RootBG

Als Code schaut das (aufs wesentliche beschränkt) so aus:

```
@SuppressWarnings( "serial" )
public class Board3D extends JPanel implements Observer{
	private Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
	
	private SimpleUniverse sUniverse;

	private TransformGroup PiecesTG;
	private Transform3D PiecesT3D;

	private BranchGroup RootBG;
	
	private Background BG = new Background();
	
	public Board3D(){
		// ... hier steht noch einiges ... //
		
		sUniverse = new SimpleUniverse( canvas );
		sUniverse.getViewingPlatform().setNominalViewingTransform();
		
		ViewT3D = new Transform3D();
		ViewTG = sUniverse.getViewingPlatform().getViewPlatformTransform();
		
		PiecesT3D = new Transform3D();
		PiecesTG = new TransformGroup( PiecesT3D );
		PiecesTG.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
		PiecesTG.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
		PiecesTG.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
		
		RootBG = new BranchGroup();
		BG = new Background(new Color3f(0.2f,0.2f,0.2f));
		createStarBackground();
		
		RootBG.addChild( BG );
		RootBG.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
		RootBG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
		RootBG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
		
		sUniverse.addBranchGraph( RootBG );
	}

	private void createSceneGraph(){
		// ... Hier werden die ganzen Steine erstellt, sprich alle TransformGroups (namens PieceGraph3D) und anschließend alle zu PiecesTG hinzugefügt ... //
	}

	@Override
	public void update(Observable observable, Object notification){
		
		// update universe and branchgroup, transformgroup		
		sUniverse.cleanup();
		
		RootBG = new BranchGroup();
		
		PiecesT3D = new Transform3D();
		PiecesTG = new TransformGroup( PiecesT3D );
		
		// sets new universe with viewing position
		sUniverse = new SimpleUniverse( canvas );
		setViewingPosition(zoomSlider.getValue());
		
		// sets background
		BG = new Background(new Color3f(0.2f,0.2f,0.2f));
		createStarBackground();
		RootBG.addChild(BG);
		
		// sets pieces to PiecesTG and lights to RootBG
		createSceneGraph();
		createLights();	
		
		// sets momently rotation
		PiecesT3D = new Transform3D();
		PiecesT3D.setRotation(new AxisAngle4f(0f,0f,1f, (float) Math.toRadians(90*index)));
		PiecesTG.setTransform(PiecesT3D);

		// adding pieces and compile
		RootBG.addChild(PiecesTG);
		
		RootBG.compile();
			
		// adding scenegraph to universe
		sUniverse.addBranchGraph( RootBG );
	}
```

Also hier bau ich das ganze Universum neu auf, da ich sonst ständig Fehlermeldungen bekomme.

Eigentlich müsste ich AUSCHLIEßLICH die TransformGroup PiecesTG ändern, denn es ändern sich ja nur die Steine. Aber das geht einfach nicht. So funktioniert es jedenfalls erst mal. Aber es STÖRT!

Weiß jemand wie ich das hinbekomme?

PS: Tut mir Leid wegen der ganzen Mühen die euch auferlege mit diesen Fragen 
Ich hoffe ihr könnt helfen und es kostet nicht zu viel Zeit.


----------



## truesoul (4. Jul 2011)

Hey.

Das sollte dir helfen evtl. Beispiel: Zeichnen mittels Java3D. 

 -- > Hier stand blödsinn < -- 


Mfg


----------



## Marco13 (4. Jul 2011)

Highchiller hat gesagt.:


> Also hier bau ich das ganze Universum neu auf, da ich sonst ständig Fehlermeldungen bekomme.



Welche?


----------



## Highchiller (4. Jul 2011)

YEAH!!!! und ich dachte das würde gar nicht gehen. Vielen vielen vielen dank


----------



## Highchiller (4. Jul 2011)

Marco13 hat gesagt.:


> Welche?



Ähm das waren ne ganze Reihe an RestrictedAccesExceptions.
Und immer als ich dachte ich habs, kam eine neue Exception.

Naja mit dem Link hab ichs hinbekommen 
Ich hatte Probleme mit den Capibilities... Aber dank truesols Link :toll:


----------

