3D-Tetris Feld neuzeichnen ohne neue Branchgroup

Status
Nicht offen für weitere Antworten.
T

TheDirtyDan

Gast
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 :D, 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

Top Contributor
"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...
 
T

TheDirtyDan

Gast
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 ^^ :p
 
T

TheDirtyDan

Gast
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

Top Contributor
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!
 
T

TheDirtyDan

Gast
Ja, soooo doof bin ich jetz auch nicht :D 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

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

TheDirtyDan

Gast
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
 
T

TheDirtyDan

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

TheDirtyDan

Gast
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

Top Contributor
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

Top Contributor
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

Top Contributor
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?
 
G

Guest

Gast
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
 

Marco13

Top Contributor
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...
 
T

TheDirtyDan

Gast
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
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben