当前位置: 首页 > 知识库问答 >
问题:

提高JavaFX关键帧速度而不依赖循环?

费星晖
2023-03-14

我正在尝试用JavaFX创建一个Snake克隆。游戏的一个要求是要有一种能量食物,它可以提高蛇的速度。

对于我的游戏循环,我使用带有单个KeyFrameTimeline,它充当游戏刻度。每个游戏对象都渲染到Canvas上。

蛇在21x21的网格中移动,每个细胞的长度为40像素。在我的实现中,蛇每滴答移动一个细胞(通过设计)。每个身体部分本质上是在当前方向上移动40像素。这意味着蛇的速度由游戏的滴答持续时间固定。

为了增加蛇的速度,我必须改变关键帧的持续时间,这会更新游戏状态并绘制到画布上。为此,我停止时间线,删除关键帧,并添加一个持续时间较短的新关键帧。

问题是为了做到这一点,我必须从游戏类的一个依赖项(例如状态类)中调用包含游戏循环的类中的一个方法。

private final Timeline loop = new Timeline();
    public void setGameSpeed(GameSpeed speed) {
        createLoop(speed.value);
    }
    private void createLoop(double duration) {
        if (loop.getStatus().equals(RUNNING)) {
            loop.stop();
        }

        if (loop.getKeyFrames().size() > 0) {
            loop.getKeyFrames().removeAll(loop.getKeyFrames());
        }

        loop.getKeyFrames().add(new KeyFrame(Duration.seconds(duration), e -> {
            state.update();
            renderer.draw();
        }));
        loop.play();
    }

到目前为止,我已经想出了两个解决方案。我可以让Timeline和相关的方法是静态的,或者将“Game”的实例传递给各自的依赖项。

有没有更优雅的方法来做到这一点?


共有1个答案

庾勇军
2023-03-14

一个选项是使用回调将委托方法传递到状态。或者类似地,使用观察者模式通知游戏,状态变化导致相应方法的调用。

另一个选项是让Game定期读取State的属性,以了解何时更改游戏速度。这样,状态就不知道游戏

 类似资料:
  • 嗨,有没有什么方法可以提高滚动速度。我找到了一些解决方案,但都不适合我。这就是我尝试的: 或者使用css: 还有别的办法吗?编辑:上面的解决方案都不起作用,我试图使用大得离谱的数字,但滚动速度还是一样

  • 我对JavaFX比较陌生。我选择了NetBeans中包含的游戏“BrickBreaker”作为示例,以帮助我了解JavaFX。 以下代码来自class: 我的问题是:是否有可能实例化一个,而不将的任何实例传递给它的构造函数? 这里的文档显示了构造函数的五个版本,它们都有一个参数,而上面的代码没有。

  • 问题内容: 以下产生。我该如何解决? 问题答案: 您可以通过为尚未定义的类使用 字符串 名称来使用前向引用: __ 从Python 3.7开始 ,您还可以通过在模块顶部添加以下导入来推迟注释的 所有 运行时解析: 此时,注释将作为表达式的抽象语法树的字符串表示形式存储;您可以用来解决这些问题(并解决上面使用的前向引用)。 有关详细信息,请参见 PEP 563-批注的延迟评估 ;此行为将是Pytho

  • 问题内容: 我是一个长期的python开发人员。我正在尝试Go,将现有的python应用程序转换为Go。它是模块化的,对我来说真的很好用。 在Go中创建相同的结构后,我似乎陷入了周期性的导入错误,这比我想要的要多得多。从未在python中出现任何导入问题。我什至不必使用导入别名。所以我可能有一些在python中不明显的周期性导入。我实际上发现那个奇怪。 无论如何,我迷路了,试图在Go中修复这些问题

  • 我已经开始为绘制温度数据编程这个应用程序,当屏幕调整大小时,画布也应该调整大小。它初始化正确,但当我想调整窗口大小时,draw()方法只会根据它绑定的stackpanes高度值调整高度大小,但它将完全忽略宽度。听者甚至不会开火。这我觉得很奇怪。此外,我必须为StackPane设置最小大小,否则将不会绘制任何东西。我没有使用FXML。 编辑我将第58行从setRight()更改为setCenter,

  • 本文向大家介绍python中提高pip install速度,包括了python中提高pip install速度的使用技巧和注意事项,需要的朋友参考一下 pip install命令默认是用的是python官方源,由于一些客观原因,连接速度很慢,甚至超时中断,到时很多模块安装不上,甚是苦恼! 怎么办? 使用国内镜像源,将以下命令完成拷贝出来,粘贴至记事本中,保存为bat文件,双击执行该批处理文件。 然