2017-10-21 1 views
2

나는 구를 만들기 위해 "Ball"이라는 javafx 객체를 작성했습니다. 이제는 객체를 메인 클래스에 표시하려고합니다. 이상적으로 볼을 만들거나 파괴하는 데 키 수신기를 사용합니다. 하지만 볼을 화면에 표시하거나 심지어 1500x900 화면을 전혀 표시하지 못합니다. 공을javafx 3D 객체를 표시하는 방법은 무엇입니까?

여기

내 코드 :

// ball object 
package bouncingballs; 

import javafx.animation.Interpolator; 
import javafx.animation.PathTransition; 
import javafx.animation.Timeline; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.PhongMaterial; 
import javafx.scene.shape.Polygon; 
import javafx.scene.shape.Sphere; 
import javafx.util.Duration; 
import static javafx.util.Duration.seconds; 

public class Ball extends Pane { 
    //Create 3D ball 
    private Sphere ball; 
    private Double radius; 
    private PhongMaterial color; 
    private Polygon poly; 

    private PathTransition path; 
    private Integer speed; 
    //Create path and animate ball in constructor 
    public Ball(Double radius, PhongMaterial color, Polygon poly) { 
     this.radius = radius; 
     this.color = color; 
     ball.setRadius(radius); 
     ball.setMaterial(color); 
     this.poly = poly; 
     speed = 10; 
     path.setPath(poly); 
     path.setNode(ball);    
     path.setInterpolator(Interpolator.LINEAR); 
     path.setDuration(Duration.seconds(speed)); 
     path.setCycleCount(Timeline.INDEFINITE); 
     path.play(); 

    } 

    //some test accessors/mutators 
    public void setRadius(Double radius) { 
     this.radius = radius; 
    } 

    public Double getRadius() { 
     return radius; 
    } 

} 

여기 내 주요 클래스 내 코드, 그것은 볼 개체를 만들고 애니메이션을 표시해야합니다. 애니메이션은 튀는 공을 시뮬레이트하기 위해 Polygon 객체 폴리곤을 따라야합니다.

//main object to show Balls to screen 
package bouncingballs; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.scene.paint.PhongMaterial; 
import javafx.scene.shape.Polygon; 
import javafx.stage.Stage; 

public class BouncingBalls extends Application { 
    @Override 
    public void start(Stage primaryStage) { 

     //create path to simulate bouncing ball 
     Polygon poly = new Polygon(750, 850, 50, 675, 500, 50, 750, 850, 1000, 50, 1450, 675);//creates path to simulate bouncing ball on 1500x900 screen 
     Double radius = 50.0; 
     PhongMaterial color = new PhongMaterial(); 
     color.setDiffuseColor(Color.OLIVE); 
     Ball ball = new Ball(radius, color, poly); 
     StackPane root = new StackPane(); 
     root.getChildren().add(ball); 
     Scene scene = new Scene(root, 1500, 900); 
     primaryStage.setTitle("Bouncing Balls"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

public static void main(String[] args) 
    {launch(args); 
    } 

} 

답변

3

당신은 오류 또는 다른 이상한 것들의 무리가 있습니다

  1. 당신의 공의 클래스가 구체를 생성,하지만 당신은 구체는 장면 그래프 (그래서 보지 않을 수) 것을 추가하지 않습니다.
  2. 볼 클래스는 창을 확장합니다. 볼은 실제로 창이 아니기 때문에 이상합니다. 어떤 것을 확장해야한다면 아마도 Sphere가 가장 좋을 것입니다.
  3. 루트에 StackPane을 사용합니다. Pane 서브 클래스는 실제로 2D 시스템을 배치하기 위해 설계되었으므로 3D 그래픽의 경우에는 그렇게하지 않는 것이 좋습니다. 3D의 경우 기본 그룹을 컨테이너로 사용하기 만하면됩니다.
  4. 3D 장면이있는 경우에는 깊이 버퍼링을 전환하는 생성자를 사용하는 것이 좋습니다.
  5. 3D 작업의 경우 장면에 PerspectiveCamera를 설정하려고합니다.
  6. 장면에 약간의 조명이 필요할 수 있습니다. JavaFX는 기본 조명을 추가하지만 필요한 조명과 다를 수 있습니다.
  7. 플랫폼에서 3D가 지원되는지 확인하려면 Scene3D ConditionalFeature를 확인해야합니다.
  8. 구의 Z 좌표를 적절하게 설정하고 원근감 카메라의 시야 내에 놓일 수있는 항목인지 확인하고 싶을 것입니다.

당신은 여기, 구 (지구)를 표시 일부 샘플 코드를 찾을 수 있습니다

샘플 위에서 만든 점의 일부를 보여줍니다.

관련 문제