複数のテキストボックスを特定の時間間隔でランダムな方向に移動させるにはどうすればよいですか?

mdave1701

私は現在、JavaFXを使用してタイプスピードゲームを作成しています。このゲームでは、単語が上から落ちる必要があり、ユーザーは下に落ちる前にできるだけ速く入力する必要があります。ゲームの基本的なセットアップの準備ができました。私が苦労しているのは、単語を上から下に落とし、下に移動する方法だけです(現在、単語は下から上に移動します)。また、複数の単語を、それらの間の特定の時間間隔、たとえば30ミリ秒で、上部のランダムな場所(同じ原点ではない)から落下させたいと思います。私がこれまでに持っているコード:

public void showWords() throws InterruptedException
    {
        int missedWords = 0;        // number of words the user failed to type
        while (missedWords != 10)   
        {
            dequedWord = queue.dequeue();           // the word that the Text object will contain
            Text runWord = new Text(dequedWord);

            wordsPane.getChildren().add(runWord);   // the canvas in which the words will travel from top to bottom
            double PaneHeight = wordsPane.getHeight();
            //double PaneWidth = wordsPane.getWidth();
            double runWordWidth = runWord.getLayoutBounds().getWidth();

            KeyValue initKeyValue = new KeyValue(runWord.translateYProperty(), PaneHeight);
            KeyFrame initFrame = new KeyFrame(Duration.ZERO, initKeyValue);

            KeyValue endKeyValue = new KeyValue(runWord.translateYProperty(), -1.0 * runWordWidth);
            KeyFrame endFrame = new KeyFrame(Duration.seconds(12), endKeyValue);

            Timeline timeline = new Timeline(initFrame, endFrame);

            timeline.setCycleCount(1);
            timeline.play();

            // add code to check whether user typed the word in the Text object

            missedWords++;
        }
    }

私はアニメーションに慣れていないので、Timeline、KeyValue、KeyFrameクラスについてはよく知りません。APIのドキュメントを読んでみましたが、あまり役に立ちませんでした。どんな助けでも大歓迎です。ありがとうございました :)

ファビアン

座標系のy軸は下を向いています(これはコンピュータグラフィックスでは非常に一般的です)。これが、ノードが間違った方向に移動する理由です。さらにTimeline新しい単語を追加するにTimelineは単語ごとに実行する必要があるため、ここではあまり適していませんTimeline

AnimationTimer代わりに、時間に応じて位置を更新したり、古い単語を削除したり、新しい単語を追加したりできる、フレームごとに呼び出されるメソッドを含むメソッドを使用することをお勧めします。

例:

@Override
public void start(Stage primaryStage) {
    final Queue<String> words = new LinkedList<>(Arrays.asList(
            "Hello",
            "World",
            "foo",
            "bar"
    ));
    final Pane wordsPane = new Pane();
    wordsPane.setPrefSize(800, 400);
    final long wordDelay = 500_000_000L; // 500 ms
    final long fallDuration = 12_000_000_000L; // 12 s

    AnimationTimer animation = new AnimationTimer() {

        private long lastWordAdd = Long.MIN_VALUE; // never added a word before
        private final Map<Text, Long> nodes = new LinkedHashMap<>();

        private double nextX = 0;

        private void assignXPosition(Text text) {
            text.setTranslateX(nextX);
            nextX += text.getBoundsInLocal().getWidth();
        }

        @Override
        public void handle(long now) {
            // updates & cleanup
            long deletionLimit = now - fallDuration;
            for (Iterator<Map.Entry<Text, Long>> iter = nodes.entrySet().iterator(); iter.hasNext();) {
                Map.Entry<Text, Long> entry = iter.next();
                final Text text = entry.getKey();
                final long startTime = entry.getValue();
                if (startTime < deletionLimit) {
                    // delete old word
                    iter.remove();
                    wordsPane.getChildren().remove(text);
                } else {
                    // update existing word
                    double factor = ((double) (now - startTime)) / fallDuration;
                    Bounds bounds = text.getBoundsInLocal();
                    text.setTranslateY((wordsPane.getHeight() + bounds.getHeight()) * factor - bounds.getMaxY());
                }
            }

            if (words.isEmpty()) {
                if (nodes.isEmpty()) {
                    stop(); // end animation since there are no more words
                }
            } else if (lastWordAdd + wordDelay <= now) {
                lastWordAdd = now;
                // add new word
                Text text = new Text(words.remove());
                wordsPane.getChildren().add(text);
                assignXPosition(text);
                text.setTranslateY(-text.getBoundsInLocal().getMaxY());
                nodes.put(text, now);
            }

        }
    };
    animation.start();

    Scene scene = new Scene(wordsPane);

    primaryStage.setScene(scene);
    primaryStage.show();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の時間間隔ごとにパンダの日時のヒストグラムを作成するにはどうすればよいですか?

分類Dev

テキストボックスの行間隔を固定するにはどうすればよいですか?

分類Dev

2つのボタンを使用して2つのボックス間でテキストを移動するにはどうすればよいですか?

分類Dev

特定の時間後にシステムを自動的にシャットダウンするにはどうすればよいですか?

分類Dev

Pygame:PyGameでランダムに生成されたプラットフォームが画面の間違ったセクションで間違った方向に移動する問題を修正するにはどうすればよいですか?

分類Dev

テキストの方向に基づいて疑似要素チェックボックスを移動するにはどうすればよいですか?

分類Dev

Rマークダウンでテキストブロックとコードブロック間の異なる間隔を自動化するにはどうすればよいですか?

分類Dev

特定の時間間隔で分度器スクリプトを自動的にトリガーするにはどうすればよいですか?

分類Dev

Jmeterでリクエストのランダムな間隔を設定するにはどうすればよいですか?

分類Dev

シルクセントラルを使用した夜間テストのために、特定の時間にテストサイクルのRUNボタンを自動的にトリガーするにはどうすればよいですか?

分類Dev

パンダで不規則な時間間隔の移動平均を実行するにはどうすればよいですか?

分類Dev

プログラムでwp7のテキストボックスの次の行に移動するにはどうすればよいですか?

分類Dev

javafx:ランダムな時間間隔でそれ自体を再起動するようにScheduledServiceを設定するにはどうすればよいですか?

分類Dev

Rマークダウンで画像の上に複数のテキストボックスを配置するにはどうすればよいですか

分類Dev

Espresso / Espressoテストのアクティビティ間でボタンの状態を移動するにはどうすればよいですか?

分類Dev

毎日特定の時間にシステムをシャットダウンするにはどうすればよいですか?

分類Dev

パンダで無制限の時間間隔インデックスを作成するにはどうすればよいですか?

分類Dev

Rで、各エントリの開始時間と停止時間によって定義される間隔の時間ヒストグラムを作成するにはどうすればよいですか?

分類Dev

`mmm`に時間のかかるドキュメントビルドステップを省略させるにはどうすればよいですか?

分類Dev

リストとアイテムの間を移動するにはどうすればよいですか?

分類Dev

複数のテキストボックスを保存するにはどうすればよいですか?

分類Dev

HTMLページの複数の行ボックスのヘッダーボックスにあるテキストをリアルタイムで動的に表示するにはどうすればよいですか?

分類Dev

Azure devopsのリストに戻らずにバックログアイテム間を移動するにはどうすればよいですか?

分類Dev

divの残りの間隔をテキストで指定するにはどうすればよいですか?

分類Dev

Javaスクリプトで同じクラス名を持つそれぞれの特定のボタンから複数のテキストボックスの値を変更するにはどうすればよいですか?

分類Dev

特定の時間間隔でレコードをカウントする効率的なクエリを作成するにはどうすればよいですか?

分類Dev

O(1)時間でリストの最後のアイテムを先頭に移動するにはどうすればよいですか?

分類Dev

Discord.jsボットのヘルプが必要です-コマンドを送信せずにボットに6時間ごとにタスクを自動実行させるにはどうすればよいですか?

分類Dev

11.10でパフォーマンスとユーザーエクスペリエンスを向上させるにはどうすればよいですか(起動+シャットダウン時間、グラフィックスなど)

Related 関連記事

  1. 1

    特定の時間間隔ごとにパンダの日時のヒストグラムを作成するにはどうすればよいですか?

  2. 2

    テキストボックスの行間隔を固定するにはどうすればよいですか?

  3. 3

    2つのボタンを使用して2つのボックス間でテキストを移動するにはどうすればよいですか?

  4. 4

    特定の時間後にシステムを自動的にシャットダウンするにはどうすればよいですか?

  5. 5

    Pygame:PyGameでランダムに生成されたプラットフォームが画面の間違ったセクションで間違った方向に移動する問題を修正するにはどうすればよいですか?

  6. 6

    テキストの方向に基づいて疑似要素チェックボックスを移動するにはどうすればよいですか?

  7. 7

    Rマークダウンでテキストブロックとコードブロック間の異なる間隔を自動化するにはどうすればよいですか?

  8. 8

    特定の時間間隔で分度器スクリプトを自動的にトリガーするにはどうすればよいですか?

  9. 9

    Jmeterでリクエストのランダムな間隔を設定するにはどうすればよいですか?

  10. 10

    シルクセントラルを使用した夜間テストのために、特定の時間にテストサイクルのRUNボタンを自動的にトリガーするにはどうすればよいですか?

  11. 11

    パンダで不規則な時間間隔の移動平均を実行するにはどうすればよいですか?

  12. 12

    プログラムでwp7のテキストボックスの次の行に移動するにはどうすればよいですか?

  13. 13

    javafx:ランダムな時間間隔でそれ自体を再起動するようにScheduledServiceを設定するにはどうすればよいですか?

  14. 14

    Rマークダウンで画像の上に複数のテキストボックスを配置するにはどうすればよいですか

  15. 15

    Espresso / Espressoテストのアクティビティ間でボタンの状態を移動するにはどうすればよいですか?

  16. 16

    毎日特定の時間にシステムをシャットダウンするにはどうすればよいですか?

  17. 17

    パンダで無制限の時間間隔インデックスを作成するにはどうすればよいですか?

  18. 18

    Rで、各エントリの開始時間と停止時間によって定義される間隔の時間ヒストグラムを作成するにはどうすればよいですか?

  19. 19

    `mmm`に時間のかかるドキュメントビルドステップを省略させるにはどうすればよいですか?

  20. 20

    リストとアイテムの間を移動するにはどうすればよいですか?

  21. 21

    複数のテキストボックスを保存するにはどうすればよいですか?

  22. 22

    HTMLページの複数の行ボックスのヘッダーボックスにあるテキストをリアルタイムで動的に表示するにはどうすればよいですか?

  23. 23

    Azure devopsのリストに戻らずにバックログアイテム間を移動するにはどうすればよいですか?

  24. 24

    divの残りの間隔をテキストで指定するにはどうすればよいですか?

  25. 25

    Javaスクリプトで同じクラス名を持つそれぞれの特定のボタンから複数のテキストボックスの値を変更するにはどうすればよいですか?

  26. 26

    特定の時間間隔でレコードをカウントする効率的なクエリを作成するにはどうすればよいですか?

  27. 27

    O(1)時間でリストの最後のアイテムを先頭に移動するにはどうすればよいですか?

  28. 28

    Discord.jsボットのヘルプが必要です-コマンドを送信せずにボットに6時間ごとにタスクを自動実行させるにはどうすればよいですか?

  29. 29

    11.10でパフォーマンスとユーザーエクスペリエンスを向上させるにはどうすればよいですか(起動+シャットダウン時間、グラフィックスなど)

ホットタグ

アーカイブ