2017-10-21 3 views
2

私は球を作成するために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; 
    } 

} 

ここでは私のメインクラスのために私のコードですが、それはボールオブジェクトを作成し、それらをアニメーション表示されるはずです。アニメーションは、ポリゴンオブジェクトのポリゴンに沿ってバウンスボールをシミュレートする必要があります。

//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. ボールクラスはペインを拡張します。ボールは実際にはペインではないので変です。もしあなたが何かを拡張するならば、おそらく球が最高かもしれません。
  3. ルートにStackPaneを使用します。 Paneサブクラスは実際に2Dシステムをレイアウトするために設計されているため、おそらく3Dグラフィックスではこれを行うのが最善ではありません。 3Dの場合、おそらく基本的なグループをコンテナとして固執するだけです。
  4. 3Dシーンがある場合は、深度バッファリングをオンにするコンストラクタを使用することをお勧めします。
  5. 3D作業では、シーンにPerspectiveCameraを設定する必要があります。
  6. あなたのシーンには、おそらく照明が必要です。 JavaFXはデフォルトの照明を追加しますが、必要なものと一致しない場合があります。
  7. プラットフォームで3Dがサポートされているかどうかは、Scene3D ConditionalFeatureで確認してください。
  8. SphereのZ座標を適切に設定し、それがあなたのパースペクティブカメラの視野内にあるものであることを確認してください。

あなたはここで、スフィア(アース)が表示され、いくつかのサンプルコードを見つけることができます。

サンプルは、上記製の点のいくつかを示しています。

関連する問題