【问题标题】:Beginner: Extend a class in javaFx初学者:在javaFx中扩展一个类
【发布时间】:2016-05-06 20:28:18
【问题描述】:

我正在用 java 开发一个游戏。我为我的游戏设计了一个关卡。现在我想为我的游戏设计另一个关卡。如果我可以扩展我以前的关卡,这对我的新关卡将非常有帮助。
在游戏中我正在做不同级别的阶段更改。为此我必须扩展 Application 类。由于 java 不支持多重继承,有没有其他方法可以在不进行阶段更改的情况下进入不同级别?

阶段变化:

    //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);
    });
    });     

一级:

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;

二级:

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;

【问题讨论】:

    标签: java inheritance javafx javafx-8


    【解决方案1】:

    改变你的设计。重构您的应用程序以使用Single Responsibility Principle。应用程序不应该负责实现关卡的逻辑,也不应该实现 Runnable。您的应用程序类应仅负责实现 JavaFX 应用程序生命周期,如 JavaFX application javadoc 中所定义。实际上,您的应用程序应该是一个非常小的类。

    相反,应将诸如实现游戏关卡之类的任务委托给处理这些事情的其他类。 Favoring composition over inheritance 可以让您更轻松地将不同的功能属性与项目相关联,而不是坚持严格且有时不灵活的层次结构,后者可能会受到diamond problem 等问题和限制的影响。

    对于似乎最适合通过多重继承解决的问题的解决方案,您可以尝试twin pattern,这实际上只是本文之前推荐的一种委托形式。

    要了解如何重构您的程序,请学习面向对象的设计原则和技术,例如 responsibility driven designcrc modeling,然后使用一些简单的 @ 在运行时验证您的设计是否适合987654328@。至于学习这些东西的书籍推荐,也许可以拿起一本Object Design: Roles, Responsibilities, and Collaborations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多