# 3D-Tetris Feld neuzeichnen ohne neue Branchgroup



## TheDirtyDan (7. Feb 2009)

Hallöööle ,

Also ich habe mir die Arbeit gemacht ein 3D-Tetris (natürlich wegen dem folgenden Problem noch nicht fertig) zu schreiben, of course in Java...
Nun habe ich das gemeine Problem, dass ich meine gesamten Objekte von Tetris, die logischerweise erst in einem 3-Dimensionalen Array eingetragen werden, nach dem durchlauf aller Methoden komplett von Java3D neuzeichnen lassen müsste... Ich hab gegooooogled und überlegt wie ichs anderws lösen könnte, bzw. dass ich alle Würfelchen schon zeichne und sie, dann entweder verstecke oder anzeige, was allerdings nirgendwo im Internet zu finden war als Lösung... Bin eigentlich kein Forenschreiber, aber... find keine andre Möglichkeit mehr (mein Info-Lehrer weiss auch keine Lösung auf Anhieb , kann man aber glaube auch nicht erwarten).

Also hoffe auf eifrige Hilfe, bin euch allen hier auf jedenfall schonmal sehr sehr dankbar!

Mit freundlichen Grüßen Daniel!


----------



## Marco13 (7. Feb 2009)

"Neuzeichnen" ist etwas, was Java3D dann macht, wenn es ihm passt (u.a. auch wenn sich an einer BranchGroup oder einer TransformGroup etwas ändert). Du müßtest vermutlich präziser sagen, was du meinst...


----------



## TheDirtyDan (7. Feb 2009)

Also gut ich versuchs präziser:
Es ist nunmal nicht wie bei Animation, von der ich dann auch nicht wüsste wie ichs organisieren sollte, dass ich eifnach die Objekte bewegen kann, denn ich habe ja mein "field[][][]" und das wird nunmal durch die einzelnen Prozeduren aktualisiert, so wie es bei den Spielregeln halt ist ^^... Nun hat sich was am gesamt-Feld verändert, alte Klötzen müssen weg und neue (beim fallenden Klotz einfach 1 tiefer) müssen ins Universum übertragen werden...
Ich will also praktisch meine gesamten alten Objekte abtöten, um schließlich alles komplett neu ins Universum einzutragen, denn würd ich einfach meine Klötzchen per Translation verschieben oder sonst was (keine Ahnung ob Java3D das bei nem bereits fertig angezeigten Universum überhaupt macht) haben meine Objektleinchen ja nicht mehr dieselbe 3D-Zuordnung wie im Feld, was zum Umsetzen als Programm denkbar ungeeignet ist...

Hoffe das is genau genug, wenn nicht, versuch ichs nochmal ^^


----------



## TheDirtyDan (7. Feb 2009)

Wieeeee, es zeichnet neu, wenn sich was an einer TransformGroup ändert???? Das machts bei mir nicht -.- Ich setze selbe TransformGroup auf "null" und mach ne neue rein mit neuem Objekt drin oder auch ohne Objekt halt... Von "Neuzeichnen", vorrausgesetzt wir verstehen dasselbe darunter, sehe ich nix :-(

MfG Daniel


----------



## Developer_X (7. Feb 2009)

Heye, ich glaube, dass kannst du nicht so einfach hinbekommen, erstmal, du musst ja Alpha benutzten, damit sich die Figuren nach unten bewegen, und du musst einen zufalls generator einbauen. Im Hintergrund musst du das gesamte spiel noch mal mit variablen laufen lassen, und die if-sentences auch dort einbauen, die 3D Welt ist nicht die Welt, in der alles passiert, sondern die welt,  die zeigt!


----------



## TheDirtyDan (7. Feb 2009)

Ja, soooo doof bin ich jetz auch nicht  ich hab schon spielprozeduren die überprüfen die eigentlich das spiel selbst steuern, aber ich will halt dann auch mein komplettes feld (3dimensionales array) in das simpleuniverse übertragen und das nunmal imme rkomplett neu, sprich das alte komplett weg das neue rein! hab auchne prozedur die alles abarbeitet und mirne branchgroup returned, doch wenn ich meine branchgroup dann auf "null" setze und gleich der neu gemachten setze, dann ändert sich nix ^^, das problem ist schlichtweg die 3d anzeige, den rest hab ich größtenteils, natürlich fehlen noch bissl was, wie dass volle ebenen entfernt werden, aber sonst für spielregeln und spiel selbst passt alles...
mfg daniel
danke schonmal für die bisherige hilfe


----------



## Developer_X (7. Feb 2009)

PS.
Man kann auch folgende sachen außer "addChild" machen
1."addChild"
2."removeChild"
3."removeAllChilds"
4."...."


----------



## TheDirtyDan (7. Feb 2009)

Jaaaa, schon probiert ^^, funktioniert aber iwi net, werde nochmal bissl was andres probiern, da ich im mom die komplette Branchgroup entferne (= null setze) und dann neu beschreibe, vllt liegts daran... falls ihr nochn paar tipps habt immer her damit, thx


----------



## TheDirtyDan (7. Feb 2009)

Aso und das mit dem remove hatte ich schon drin, hatte zuerst denselben fehler wie du grad  plural von child is children ^^


----------



## TheDirtyDan (7. Feb 2009)

Soll ich euchmeine Dateien mal hochladen? Ist aber schlecht kommentiert und insgesamt wirkts ein bisschen Baustelle ^^ Also falls ja, wenn ihr mir dann besser helfen könnt einfach melden ;-) 

Daniel


----------



## Marco13 (7. Feb 2009)

Da niemand deine Stukturen kennt, und aufgrund der (imho widersprüchlichen) Aussagen nicht klar ist, ob du eine neuen BG erstellen willst oder wie oder was könnte ein bißchen Code helfen... Falls sich jemand die Mühe macht, das dann nachzuvollziehen.


----------



## Illuvatar (7. Feb 2009)

Aaalso:

1) Ist es Performancetechnisch sicherlich (viel!) besser, wenn du die fallenden Klötze immer verschiebst, anstatt die alten zu entfernen und neue zu erzeugen und wieder hinzuzufügen

2) Klingt das so als würdest du da deinen SceneGraph verändern, ohne Behaviors zu verwenden. Das sollte man nicht tun - die Behaviors sind dazu da, dass dein Code mit dem J3D-Thread synchronisiert wird. Tu deinen Code also am Besten in einen Behavior, den du so einstellst dass er nach jedem Frame oder alle paar Millisekunden aufgerufen wird.


----------



## Developer_X (7. Feb 2009)

erstmal, bevor du
1."addChild" 
2."removeChild" 
3."removeAllChilds" 
4."...."
benutzten kannst, musst du mit der TransformGroup folgendes Machen:
transformGroup.setCapability(TransformGroup.ALLOW_CHILD_WRITE);
ok?


----------



## Guest (7. Feb 2009)

Ja hab ich ja, die Rechte für die einzelnen TransformGroups, bzw. für die BranchGroup sind vorhanden... Das verschieben der anderen Objekte ist zum programmieren ein bisschen schlecht umzusetzen, da ich ja ein festes Feld habe, in dem eingetragen ist wo, welcher Klotz sich im moment befindet (und welche Farbe er hat, ist einfach per Zahl-Wert geregelt, 0 = kein Klotz, 1 = roter Klotz ...).
Performancetechnisch ist es höchstwahrscheinlich wirklich besser das ganze als Verschiebung zu realisieren, aber es is halt ein bisschen schwierig die Klötzchen dann im Nachhinein auch wieder mit den richtigen Koordinaten anzusprechen, was die sache etwas komplizierter macht... Komm grad zumindest auf keine Idee wie ich das effektiv lösen könnte...

Danke für eure zahlreichen und vor allem schnellen Antworten...

Daniel


----------



## TheDirtyDan (8. Feb 2009)

Gast = Ich


----------



## TheDirtyDan (14. Feb 2009)

nix mehr, womit ihr mir evtl helfen könntet??? :.(


----------



## Marco13 (14. Feb 2009)

Alle Würfel immer existieren lassen, und sie nur passend ein- und ausschalten wäre eine Option, aber wenn sie auch die Farbe ändern sollen, muss man dann auch die Appearance richtig setzen und so... Ansonsten müßtest du ggf. genauer beschreiben, wie es jetzt umgesetzt ist, und was du gerne anders hättest...


----------



## TheDirtyDan (14. Feb 2009)

Ja das mit dem ein-/ausschalten bzw. ein-/ausblenden oder wie man es auch betiteln mag, wär eigentluich perfekt, appearence setzen ist an sich auch kein problem, da ich einfach im 3d-array fürs feld die darinstehende integer zahl übrpüfe, 1 isne farbe, 2 is eine, 3 is eine, usw., und 0 wäre dann halt ausgeschaltet...

weisst du denn wie ich das "ausgeschaltet" bekomme, habe von herrn google keine brauchbare antwort bekommen..

mfg daniel


----------



## Marco13 (14. Feb 2009)

!? http://download.java.net/media/java3d/javadoc/1.3.2/javax/media/j3d/Switch.html !?


----------

