如何不让我的图像移出场景

时间:2017-09-14 08:55:01

标签: image javafx scene

以下是我的以下代码:

John   ----- Good
Doe    ----- Bad
Dennis ----- Very Bad

在我的代码中,我的图片 public void start(Stage primaryStage) throws Exception { Pane root = new Pane(); Scene scene = new Scene(root, 500, 500, Color.RED); ImageView dice = new ImageView(new Image(getClass().getResourceAsStream("dice.jpeg"))); dice.setX(0); dice.setY(300); root.getChildren().add(dice); scene.setOnKeyPressed(e -> { if (dice.getX() >= 0 && dice.getX() <= 500 ) { switch (e.getCode()) { case RIGHT: dice.setX(dice.getX() + KEYBOARD_MOVEMENT_DELTA); break; case LEFT: dice.setX(dice.getX() - KEYBOARD_MOVEMENT_DELTA); break; } } }); primaryStage.setScene(scene); primaryStage.show(); } 可以左右移动,但我不希望它移出场景。我希望它一旦到达左右两侧的场景结束就不会移动。我尝试用dice语句来做,但它不起作用。有什么方法可以阻止我的图像if不能移出场景吗?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

你的答案有几个问题。首先,你检查边界的方式。如果符合条件,您的密钥将不再控制ImageView。其次,在测试条件中使用dice.getX()。如果您使用dice.getLayoutBounds().getMaxX()dice.getLayoutBounds().getMinX(),情况会最好。另外,我建议使用scene.getWidth()而不是硬编码Scene的宽度,因为Scene宽度可以更改。 &lt ;-(在您发布的代码中)。

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFxTestingGround extends Application {

    double KEYBOARD_MOVEMENT_DELTA = 5;

    @Override
    public void start(Stage primaryStage) throws IOException {
        Pane root = new Pane();
        Scene scene = new Scene(root, 500, 500, Color.RED);

        ImageView dice = new ImageView(createImage("https://cdn.discordapp.com/attachments/250163910454280192/296377451599364107/Untitled.png"));
        dice.setFitHeight(100);
        dice.setFitWidth(100);
        dice.setX(0);
        dice.setY(300);
        root.getChildren().add(dice);

        scene.setOnKeyPressed(e -> {       
            System.out.println(dice.getLayoutBounds().getMinX() + " : " + dice.getLayoutBounds().getMaxX() + " : " + scene.getWidth());
            switch (e.getCode()) {
                case RIGHT:
                    dice.setX(dice.getX() + KEYBOARD_MOVEMENT_DELTA);
                    break;

                case LEFT:
                    dice.setX(dice.getX() - KEYBOARD_MOVEMENT_DELTA);
                    break;
             }


            if (dice.getLayoutBounds().getMinX() < 0)   
            {
                dice.setX(0);
            }            
            else if(dice.getLayoutBounds().getMaxX() > scene.getWidth() )
            {
                dice.setX(dice.getX() - KEYBOARD_MOVEMENT_DELTA);
            }           
        });

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

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    Image createImage(String url)
    throws IOException {
        URLConnection conn = new URL(url).openConnection();
        conn.setRequestProperty("User-Agent", "Wget/1.13.4 (linux-gnu)");

        try (InputStream stream = conn.getInputStream()) {
            return new Image(stream);
        }
    }
}