質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • JavaFX

    397questions

    JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

フレームレートに依存しないゲームループの作成方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 274

chankane

score 117

 前提・実現したいこと

javafxの勉強がてらにゲームを作っております.
そこで疑問に思ったのですが,フレームレートに依存しないゲームループはどのようにしたら実装できるのでしょうか?
処理に遅延が発生した場合,遅延が蓄積されないようにするにはどのような方法をとればよいでしょうか?

大雑把な質問になってしまい申し訳ありません.ただ気になるのでご教授願えませんでしょうか?

 考えてみたこと

  1. AnimationTimerを使う
    私の環境では60FPSだった.
    このクラスのhandleで例えば敵が追ってくるコードを書いたとする.
    仮に超クソPCでフレームレート=5だった場合,敵がのろのろ追ってくるということになりかねないだろうか?
    遅延が発生した場合,その遅延は蓄積されるのだろうか?

  2. Timelineを使う
    16.666666666...という微妙な値をどう扱えばいいのだろうか?
    16ms + 17ms + 17ms としたら割り切れるのだがこれもどう実現したらよいのか?
    遅延が発生した場合,その遅延は蓄積されるのだろうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

仮に超クソPCでフレームレート=5だった場合,敵がのろのろ追ってくるということになりかねないだろうか?

フレームレートは「JavaFXランタイムに対するヒント」と考えるとよいと思います。実際にどのような頻度で呼び出されるかをJavaFXが保証することはできないだろうと思います。PCの能力、プログラムが対象としているモデルの複雑さ、OS上で動作している他のプログラムの状況等々によって処理の負荷は変わります。実際にやってみるとhandleメソッドが起動されるタイミングも変動することが観察できます。

handleメソッドになぜ引数として「現在のフレームのタイムスタンプ」が渡されるか考えてみてください。フレームレートがJavaFXで充分保証できるようなものだったらこんなものは必要なく、単に何回目のフレームかでよかったはずです。ずれるからこそ「実際に呼び出された時刻がどうだったか」の情報が必要になるわけで、その値に従って適切な計算をするという点がプログラマーが考えるべきことになります。

遅延が発生した場合,その遅延は蓄積されるのだろうか?

いえ、AnimationTimerもTimelineもフレームの遅延が蓄積されないように設計されてます。

16.666666666...という微妙な値をどう扱えばいいのだろうか?

制御すべき値(座標など)は連続値(整数ではなく実数値)として計算するように考えてください。

例えばt0で位置がx0, t1で位置がx1でなければならないなら、t0 <= t <= t1であるようなtのときのxの座標は

(x0 * (t1 - t) + x1 * (t - t0)) / (t1 - t0)

として計算すればよいと考えるのです。Timelineでは実際そのようにして任意の時刻でのプロパティーの値を補間するようになっています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/15 13:55

    申し訳ございません.ベストアンサー忘れていました.
    大変失礼いたしました.

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    c言語 アニメーションの繰り返し中のキー入力

    c言語でアニメーションを使ったゲームを作っています。HandyGraphicsを使っています。 大体の基礎は出来ましたが、プレイヤーをキー入力で操作する動作を加えたいと思っていま

  • 解決済

    Unityで現在地にパーティクルを出現させる方法

    上下キーなどでカメラを操作していても、 動いているカメラの現在座標を取得して、その座標にパーティクルを出現させる方法を教えていただけないでしょうか。 パーティクルはあらかじ

  • 解決済

    FFprobe 動画の解像度取得

    前提・実現したいこと ffprobeを使い、動画ファイルの解像度を取得したいです。 FORMATみたいに書き出せられれば、プログラムで取得できると思うので、 解像度を抜き出し

  • 解決済

    アニメーションするようにオブジェクトを移動させたい

    すみません、質問させてください。 オブジェクトを移動させる際に、指定の場所に複数回に分けて移動させたいのですが、一瞬で移動してしまいます。 これを複数回に分けて動かすようにして

  • 解決済

    VBA フレーム スクロール (Formの一部分だけをスクロール)

    実現したいこと ExcelのVBAのフォーム画面にてデータを扱います フォームにフレームAを配置し、フレームAをスクロールさせるのは可能でしょうか? フレーム内にたくさん

  • 解決済

    C#でオブジェクトをなめらかに回転させたいです

    UnityでC#で書いています。 オブジェクトをクリックしたときに-90°なめらかに回転させたいのですが、 すぐ回転してしまいます…どうしたらよいのでしょうか? pri

  • 解決済

    libGDXのrenderメソッドについて

    解説していただきたい内容 libGDXで弾幕STGを作成してみようと思った初心者のものなのですが renderメソッドにwhite文を書きKey入力で画像を動かす処理を書いたところ

  • 解決済

    transformの移動とrigitbodyの移動について

    お世話になります。 当方初心者の為、無作法ご容赦ください。 掲題の質問についてですか、rigitbodyに対して、力を与えた場合見た目スムーズな移動にみえます。 対してtran

同じタグがついた質問を見る

  • JavaFX

    397questions

    JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。