JavaFx:每帧更新位置

时间:2017-05-06 19:19:15

标签: java javafx

我目前正在用JavaFx编写一个棋盘游戏。为此,我有一个班级Board,其中包含Field列表。 Field只有yx值作为职位。在start - 我的应用程序的方法中,我创建了一个棋盘游戏的对象,它在构造函数中创建了一些字段并将其添加到列表中。现在我从棋盘游戏中获取了字段列表,迭代它然后在给定位置绘制一个圆圈。

现在我的问题是:如何更改在运行时绘制圆圈的坐标以移动/动画字段?有没有办法联系"我的场对象坐标到绘制的圆(可能是扩展类,所以它可以直接绘制)或者我是否必须删除舞台外的所有元素并添加新的圆圈和我的字段的新位置?

该字段可能稍后会更复杂(图形,文本,EventListner等)。因此,解决方案不仅应该对形状有效。

以下是相关代码:

Main.java

public class Main extends Application {

    Stage window;
    int windowWidth = 1000;
    int windowHeight = 1000;

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

        window = primaryStage;

        Group group = new Group();
        group.getChildren().add(button1);

        Scene scene1 = new Scene(group, windowWidth, windowHeight);
        scene1.setFill(Color.rgb(100,100,100, 0.2));

        Board board = new Board();

        for (Field f : board.getFields()) {
            //Make circles out of the fields
            Circle circle = new Circle(calculatePercentageX(f.getXPos()), calculatePercentageY(f.getYPos()), 20, Color.RED);
            group.getChildren().add(circle);
        }

        window.setScene(scene1);
        window.show();
    }


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

    public int calculatePercentageX(int xPx) {
        System.out.println(xPx + " und " + windowWidth + " und " + 100);
        return (int)Math.round(windowWidth/100*xPx);
    }

    public int calculatePercentageY(int yPx) {
        return (int)Math.round(windowHeight/100*yPx);
    }
}

Board.java

public class Board {
    List<Field> fields = new LinkedList<>();

    public Board() {

        //generate fields (id, xPos, yPos)
        fields.add(new Field(0, 10, 10));
        fields.add(new Field(1, 20, 20));
        fields.add(new Field(2, 40, 30));
        fields.add(new Field(3, 40, 60));
        fields.add(new Field(4, 60, 20));
    }

    public List<Field> getFields() {
        return fields;
    }
}

Field.java

public class Field {
    protected int id = 0;
    protected int xPos = 0;
    protected int yPos = 0;

    public Field(int id, int xPos, int yPos){
        this.id = id;
        this.xPos = xPos;
        this.yPos = yPos;
    }

    public int getXPos(){
        return xPos;
    }

    public int getYPos(){
        return yPos;
    }
}

0 个答案:

没有答案