JavaFX - 在循环中绘制(蛇)

时间:2018-05-01 21:55:12

标签: java javafx scenebuilder

目前,我正在玩JavaFX,因为我正在为我的Java Fundamentals类最终项目编写一个Snake游戏。我用动画创建简单的游戏并不是那么新,因为我在C中使用PyGame模块和SDL做了一些。无论如何,现在我很难理解JavaFX中某些对象的相关性,特别是在组合时使用SceneBuilder的FXML。

我只是无法理解如何创建我曾经在PyGame或SDL中实现的等效游戏循环。我想用下面的代码做的是在创建新的Game对象后立即进入游戏循环,并在SceneBuilder中创建的gameCanvas上连续绘制游戏状态。我想我以后可以轻松管理所有的东西,但我无法理清如何在FXML画布和我想要运行的游戏循环之间建立合法的联系。

GameController.java

def main():

    files = [f for f in os.listdir('.') if os.path.isfile(f)]
    for f in files:
        parseAble = False
        temp = ''
        # The -1 ensures that you're getting the actual file extension of 
        # the file, your previous code will fail with filenames like
        # "file.bpmn.xml"
        if f.split('.')[-1] == 'bpmn':
            print(f.split('.')[-1])
            n = '.'.join(f.split('.')[:-1]) + '.xml'
            shutil.move(f, n)
            print(f + ' > ' + n)
            parseAble = True
        elif f.split('.')[-1] == 'xml':
            parseAble = True
            n = f

        if parseAble == True:
            print(n)
            x = FileParser(n)
            x.getLaneInfo()
            x.getTaskData()
            x.sortTasks()
            x.collectUrls()
            x.outputJsonFile(x.serialize())
            shutil.move(n, f)

Game.java

public class GameController implements Initializable, ControlledScreen {

@FXML
private Canvas gameCanvas;

@Override
public void setScreenParent(ScreensController screenPage) {
    // THIS IS FOR SCENE MANAGEMENT CONCEPT

}

1 个答案:

答案 0 :(得分:0)

您无法使用FXML文件创建新场景。请改用

public class Screen extends Application implements Runnable
{
    @Override
    public void start ( Stage primaryStage )
    {
        Pane pane = new Pane ();
        Scene scene = new Scene(pane,500,300);
        primaryStage.setScene ( scene );
        primaryStage.show ();
    }

    @Override
    public void run ()
    {
        launch ();
    }
}

您要添加的任何内容都会转到窗格元素您的画布等。 顺便说一句,让dificulty枚举不像

enum {easy,medium,hard}
通过这种方式,没有人可以将缺陷级别设置为不存在的东西。