1

私はJavaFXでゲームを作成しており、ゲームの速度を制御するためのスライダーを実装しています。単純なスライダー(javafx.scene.control.Slider)があり、ゲームループの時間属性をスライダーから取得した値にバインドしています。

スライダーは、ゲームスピードを上げるときにのみ実際に機能します。減らすと、gameUpdate()はしばらく停止します-どれだけ減らすかによって異なります。ゲームが追いつくのを待っている間にスライダーを上げると、ゲームは再び続行されます。どれだけ待っても、ゲームがまったく追いつかないように見えることがあります。

キーフレーム時間を変更することは一般的に悪い考えですか、それとも他のことを忘れていますか?canSkip変数を変更してみましたが、ゲームを再開するとゲームがスムーズに実行されるようですが、あまり役に立ちません。

def gameLoop:Timeline = Timeline{
    repeatCount: Timeline.INDEFINITE
    keyFrames: [
        KeyFrame{
            time: bind Duration.valueOf(Config.REFRESH_RATE_NUMBER - gameSpeed)
            action: function(){
                gameUpdate();
            }
        }
    ]//keyFrames[]
}// Timeline{}
4

2 に答える 2

1

これにかなり似た状況を見たことがあります (JavaFX 1.1.1 ではありますが)。JIRA で報告しました

宣言をスクリプトレベルから移動すると、これが解決されることがわかりました-私の場合、これは初期化関数(init {}ブロックではありません)にありました。

ただし、キーフレームの時間を動的に変更することは悪い考えであることに同意します。投稿したスニペットでの「サブタイムライン」の使用は明らかにサポートされていません。代わりに、JavaFX 1.2 SequentialTransitionおよびParallelTransitionタイムラインを使用することをお勧めします。

詳細については JIRA バグ レポートを読み、問題が解決しない場合は投稿してください。

于 2009-12-02T22:07:31.223 に答える
0

関数で一連のキーフレームを生成してから、キーフレームを削除して再設定することをお勧めします。バインドを使用すると、ユーザーがスライダーをドラッグしているときにタイムラインを調整しようとする可能性があります。

于 2009-12-08T18:02:31.680 に答える