2017-11-01 3 views
2

Ich versuche, 3D-Arbeit mit Javafx (mit der TornadoFX-Bibliothek) zu tun und kann nicht PerspectiveCamera auf Scene setzen, da Scenenull zurückgibt.Warum ist meine Szene null?

ich mein Programm starten wie folgt:

class ThreeDTest : App(HomeView::class, ThreeDStyles::class) { 
    override fun start(stage: Stage) { 
     super.start(stage) 
     stage.show() 
     stage.scene.fill = Color.BLACK 

     val primaryScreenBounds = Screen.getPrimary().visualBounds 

     stage.maxWidth = 1920.0 
     stage.maxHeight = 1080.0 
     stage.minWidth = 1920.0 
     stage.minHeight = 1080.0 
    } 
} 

und dann in HomeView Klasse Ich habe diese:

class HomeView : View() { 
    override val root = stackpane { 
     val axisGroup = Xform() 
     val world = Xform() 
     val camera = PerspectiveCamera(true) 
     val cameraXform = Xform() 
     val cameraXform2 = Xform() 
     val cameraXform3 = Xform() 
     val cameraInitialDistance = -450.0 
     val cameraInitialXAngle = 70.0 
     val cameraInitialYAngle = 320.0 
     val cameraNearClip = 0.1 
     val cameraFarClip = 10000.0 

     //just a builder class to add properties to the camera 
     buildCamera(this, cameraXform, cameraXform2, cameraXform3, camera, cameraNearClip, cameraFarClip, cameraInitialDistance, 
      cameraInitialYAngle, cameraInitialXAngle) 
     buildAxes(axisGroup, world) 

     println(scene) 
     //returns null 
     scene.camera = camera 
     //this does not work as scene is null 
} 

Gibt es etwas, was ich falsch mache? Ich habe keine Ahnung, warum meine Scene Null ist, wie ich dachte, TornadoFX View sollte eine neue Scene erstellen, wenn es initialisiert wird? Muss ich es manuell in der App-Klasse erstellen? Ich versuchte, die createPrimaryScene Funktion außer Kraft zu setzen, und bewegte auch meinen Code zu einer init Funktion innerhalb der HomeView Ansicht - beide mit keinem Erfolg.

Irgendwelche Ideen? Hier Haare herausziehen.

(Oh, und auf einer nicht verwandte Notiz, konnte ich nur sagen, dass mit 3D-Unterstützung in TornadoFX wäre, ehrlich gesagt, mein ganzes Leben lang machen?)

+1

Wir werden definitiv in die Erstellung von 3D-Builder für TornadoFX :) –

Antwort

3

die Ansicht erstellt wird, bevor die Szene angebracht ist, Um die Szene zu manipulieren, überschreiben Sie einfach onDock und führen Sie Ihre Operationen dort durch. Wenn onDock aufgerufen wird, wird die Szene angehängt.

+0

Funktioniert perfekt, vielen Dank! – shanling

+0

Mein Vergnügen! :) –