3
總之 - 我有2個旋轉的矩形。在旋轉(通過Y軸)時,它們應該重疊於另一個 - 不幸的是,儘管180度轉彎,矩形之一「總是在前面」。如何解決這個問題?它看起來像是矩形添加到組中的順序。最後添加的那個總是在前面。疊加形狀 - 錯誤的重疊形狀行爲
場景:
package drawing.scene;
import javafx.application.Application;
import javafx.geometry.Point3D;
import javafx.scene.Camera;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import drawing.objects.Clock;
import drawing.objects.Cube;
public class MyScene extends Application {
private int sceneEdgeSize = 800;
private int clolcSize = 400;
@Override
public void start(Stage primaryStage) throws Exception {
Group g = new Group();
g.setTranslateX((sceneEdgeSize - clolcSize)/2f);
g.setTranslateY((sceneEdgeSize - clolcSize)/2f);
final Cube c = new Cube(clolcSize);
g.getChildren().add(c);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Rotate r = rotate(0, Rotate.Y_AXIS);
c.getTransforms().add(r);
double angle = 0.0;
while (true) {
r.setAngle(angle += 2);
try {
Thread.sleep(25);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t.setDaemon(true);
primaryStage.setScene(new Scene(g, sceneEdgeSize, sceneEdgeSize));
PerspectiveCamera camera = new PerspectiveCamera();
primaryStage.getScene().setCamera(camera);
primaryStage.show();
t.start();
}
public static void main(String[] args) {
launch(args);
}
public Rotate rotate(double angle, Point3D axis) {
return new Rotate(angle, clolcSize/2f, clolcSize/2f, 0, axis);
}
}
魔方類:
package drawing.objects;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
import javafx.scene.transform.Rotate;
public class Cube extends Group {
private double edgeLength = 0;
public Cube(double edgeLength) {
super();
this.edgeLength = edgeLength;
create();
}
private void create() {
final Rotate rx = new Rotate(0, Rotate.X_AXIS);
final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
this.getTransforms().addAll(rx, ry, rz);
ObservableList<Node> children = this.getChildren();
//@formatter:off
Rectangle rect;
rect = RectangleBuilder // face
.create()
.width(edgeLength-20)
.height(edgeLength-20)
.translateZ(edgeLength * 0.5)
// .translateY(edgeLength * 0.5)
// .translateX(-edgeLength * 0.5)
.fill(Color.LIGHTGREEN)
.build()
;
children.add(rect);
rect = RectangleBuilder // face
.create()
.width(edgeLength-20)
.height(edgeLength-20)
.translateZ(-edgeLength * 0.5)
// .translateY(-edgeLength * 0.5)
// .translateX(-edgeLength * 0.5)
.fill(Color.DARKGREEN)
.build()
;
children.add(rect);
//@formatter:on
}
}
現在是一個很好的答案先生! +1並接受的答案爲您effoort。謝謝! – Antoniossss