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:
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.
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:
Java:
@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.