2016-05-06 5 views
0

私のゲームでは、私のゲームでは、レベルを設計しています。私は私のゲームのための別のレベルを設計したいと思います。私の前のレベル。
ゲームで私は様々なレベルでステージの変更を行っています。そのために私はアプリケーションクラスを拡張する必要があります。Javaは複数の継承をサポートしていません。初心者:javaFxのクラスを拡張する

ステージの変更:

//LevelOne selection 
    levelOneIm = new ImageView(); 
    levelOne = new Image("minion/image/levelOne.jpeg"); 
    levelOneIm.setImage(levelOne); 
    levelOneIm.setTranslateX(300); 
    levelOneIm.setTranslateY(200); 
    levelOneIm.setOnMouseClicked(e -> { 
     popUp.show(); 
     popUpOk.setOnAction(ab -> { 
      try { 
       userName = popUpUserName.getText(); 
      } catch(Exception a){ 
       System.out.println("Exception handled"); 
      }  
      //Going to Main Game and popup stage closing 
      Minion minion = new Minion(); 
      popUp.close(); 
      minion.gameRun = true; 
      minion.start(stage);//Level1 stage change 
    }); 
    }); 

    //LevelTwo selection 
    levelTwoIm = new ImageView(); 
    levelTwo = new Image("minion/image/levelTwo.jpg"); 
    levelTwoIm.setImage(levelTwo); 
    levelTwoIm.setTranslateX(500); 
    levelTwoIm.setTranslateY(200); 
    levelTwoIm.setOnMouseClicked(e -> { 
     popUp.show(); 
     popUpOk.setOnAction(ab -> { 
      try { 
       userName = popUpUserName.getText(); 
      } catch(Exception a){ 
       System.out.println("Exception handled"); 
      }  
      //Going to LevelTwo and popup stage closing 
      LevelTwo levelTwo= new LevelTwo(); 
      popUp.close(); 
      levelTwo.gameRun = true; 
      levelTwo.start(stage); 
    }); 
    });  

レベル1:

public class Minion extends Application implements Runnable{ 
    private Group root; 
    private StackPane stackpane; 
    private Scene mainbgscene; 
    private ImageView mainbgv,heartIm1,heartIm2,heartIm3,characterIm,obsIm,obsIm2,obsIm3,obsIm4,obsIm5,obsIm6,obsIm7; 
    private Image mainbg,heart1,character,obs,obs2,obs3,obs4,obs5,obs6,obs7; 
    private VBox mainvbox,scoreVbox,characterVbox,obsVbox; 
    private HBox heartHbox,scoreHbox; 
    private Stage stageContainer; 
    private Label scoreLabel; 
    private Rectangle scoreBox; 

レベル2:

public class LevelTwo extends Application implements Runnable{ 
    private Group root; 
    private StackPane stackpane; 
    private Scene mainbgscene; 
    private ImageView mainbgv,heartIm1,heartIm2,heartIm3,characterIm,obsIm,obsIm2,obsIm3,obsIm4,obsIm5,obsIm6,obsIm7; 
    private Image mainbg,heart1,character,obs,obs2,obs3,obs4,obs5,obs6,obs7; 
    private VBox mainvbox,scoreVbox,characterVbox,obsVbox; 
    private HBox heartHbox,scoreHbox; 
    private Stage stageContainer; 
    private Label scoreLabel; 
    private Rectangle scoreBox; 
    private Runnable r1; 
    private int characterBoundary,life; 
    private boolean flag1 =true; 
    private boolean obf1,obf2,obf3,obf4,obf5,obf6,obf7; 
    private double characterX,characterY; 
    public static int score,lastScore; 

答えて

2

デザインを変更します。アプリケーションをリファクタリングしてSingle Responsibility Principleを利用してください。アプリケーションは、レベルのロジックを実装する責任を負うべきではなく、Runnableを実装する必要もありません。アプリケーションクラスは、JavaFX application javadocで定義されているように、JavaFXアプリケーションライフサイクルの実装のみを担当する必要があります。実際、あなたのアプリケーションは本当に小さなクラスでなければなりません。

代わりに、ゲームレベルを実装するなどのタスクは、それらを処理する他のクラスに委任する必要があります。 Favoring composition over inheritanceを使用すると、さまざまな機能属性をアイテムに簡単に関連付けることができ、diamond problemなどの問題や制限を受ける厳しい、場合によっては柔軟性のない階層に固執することはありません。

複数の継承による解決に最も適しているような問題を解決するには、twin patternを試してみてください。これは、この記事で以前に推奨されているような委任のフォームに過ぎません。

、あなたのプログラムをリファクタリングに取り掛かるなどresponsibility driven designcrc modelingのようなオブジェクト指向設計の原則とテクニック、上に勉強する方法を理解するには、その後、あなたのデザインは、いくつかの簡単なsequence diagramsを使用して、ランタイムベースで一緒に収まることを確認。このようなことを学ぶための推奨書籍としては、おそらくObject Design: Roles, Responsibilities, and Collaborations