0

javafxでスロットマシンアプリを作成しています。望ましい動作: 分割された画像は、アニメーション中に実際のスロット マシンのドラムとしてペインに表示される必要があります (チェリー、レモン、ナンバー サーバーなどの画像は、ユーザーにとって 1 つの完全な平和のように見える必要があります)。

スロットマシン

私の問題は、スロットマシンのウィンドウをシームレスにスクロールするために別々の画像をまとめることができないことです。この問題について多くの検索を行いましたが、有効な解決策が見つかりませんでした。すべての画像を A​​rrayList に追加してから、アニメーション処理中にノードを TranslateTransition 参照に設定しようとしました。しかし、Windowsの初期画像スタック。

import javafx.animation.Interpolator;
import javafx.animation.ParallelTransition;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TestClass extends Application {

private BorderPane borderPane = new BorderPane();
private GridPane gridPane = new GridPane();

@Override
public void start(Stage primaryStage) throws Exception {

    ImageView image1 = new ImageView(createImage(Color.RED));
    ImageView image2 = new ImageView(createImage(Color.GREEN));
    ImageView image3 = new ImageView(createImage(Color.BLUE));

    gridPane.setLayoutX(50);
    gridPane.setLayoutY(50);
    gridPane.setPadding(new Insets(5, 5, 5, 5));
    gridPane.setAlignment(Pos.CENTER);
    gridPane.setVgap(5);

    gridPane.add(image1, 0, 0);
    gridPane.add(image2, 1, 0);
    gridPane.add(image3, 2, 0);
    gridPane.setMaxWidth(image1.getFitWidth() * 3);
    gridPane.setMaxHeight(image1.getFitHeight());

    Rectangle clip = new Rectangle(732, 230);
    clip.setLayoutX(30);
    clip.setLayoutY(10);
    clip.setStroke(Color.BLACK);

    // clip.setFill(null);

    gridPane.setClip(clip);

    borderPane.setCenter(gridPane);
    Scene scene = new Scene(borderPane, 900, 500);
    primaryStage.setScene(scene);
    primaryStage.setTitle("SlotMachine");
    primaryStage.show();

    ImageView[] images = { image1, image2, image3 };

    TranslateTransition t1 = new TranslateTransition();
    for (ImageView i : images) {

        t1.setDuration(Duration.millis(2000));
        t1.setNode(i);
        t1.setFromX(image1.getX());
        t1.setFromY(image1.getY() - gridPane.getHeight());
        t1.setToX(image1.getX());
        t1.setToY(image1.getY() - image1.getFitHeight() / 2 + gridPane.getHeight());
        t1.setCycleCount(2);

        t1.setAutoReverse(false);
        t1.setInterpolator(Interpolator.LINEAR);
    }

    TranslateTransition t2 = new TranslateTransition();
    for (ImageView i : images) {

        t2.setDuration(Duration.millis(2000));
        t2.setNode(i);
        t2.setFromX(image2.getX());
        t2.setFromY(image2.getY() - gridPane.getHeight());
        t2.setToX(image2.getX());
        t2.setToY(image2.getY() - image2.getFitHeight() / 2 + gridPane.getHeight());
        t2.setCycleCount(2);

        t2.setAutoReverse(false);
        t2.setInterpolator(Interpolator.LINEAR);
    }

    TranslateTransition t3 = new TranslateTransition();
    for (ImageView i : images) {

        t3.setDuration(Duration.millis(2000));
        t3.setNode(i);
        t3.setFromX(image3.getX());
        t3.setFromY(image3.getY() - gridPane.getHeight());
        t3.setToX(image3.getX());
        t3.setToY(image3.getY() - image3.getFitHeight() / 2 + gridPane.getHeight());
        t3.setCycleCount(2);

        t3.setAutoReverse(false);
        t3.setInterpolator(Interpolator.LINEAR);
    }

    ParallelTransition pt = new ParallelTransition(t2, t3, t1);
    pt.play();
}

private final Image createImage(Color color) {
    Rectangle rect = new Rectangle(32, 32);
    rect.setFill(color);
    return rect.snapshot(null, null);

}

public static void main(String[] args) {
    launch(args);
}

} 助けてください。前もって感謝します

4

1 に答える 1