Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动画跳到右侧_Java_Animation_Javafx - Fatal编程技术网

Java 动画跳到右侧

Java 动画跳到右侧,java,animation,javafx,Java,Animation,Javafx,我正忙着学习一些简单的MVC模型,有一件事我想不出来。。当我运行动画时,圆会向右跳一点(似乎是半径的一半) 以下是我的四节课: 模型: public class Model { private int radius; private int xAs; private int yAs; public Model(int xAs, int yAs, int radius){ this.xAs = xAs; this.yAs = yAs

我正忙着学习一些简单的MVC模型,有一件事我想不出来。。当我运行动画时,圆会向右跳一点(似乎是半径的一半)

以下是我的四节课:

模型:

public class Model {
    private int radius;
    private int xAs;
    private int yAs;

    public Model(int xAs, int yAs, int radius){
        this.xAs = xAs;
        this.yAs = yAs;
        this.radius = radius;
    }

    public int getRadius(){
        return radius;
    }

    public void setRadius(int radius){
        this.radius = radius;
    }

    public int getXAs(){
        return xAs;
    }

    public void setXAs(int xAs){
        this.xAs = xAs;
    }

    public int getYAs(){
        return yAs;
    }

    public void setYAs(int yAs){
        this.yAs = yAs;
    }
}
观点:

import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

public class View extends Pane{

    private Circle bal;
    private Button start;
    private Button stop;
    private Model model;

    public View(Model model){
        this.model = model;
        createBal();
        this.getChildren().add(bal);


        start = new Button("Start");
        start.setMinWidth(75);
        stop = new Button("Stop");
        stop.setMinWidth(75);
    }

    public void createBal(){
        bal = new Circle();
        bal.setRadius(model.getRadius());
        bal.setCenterX(model.getXAs()+bal.getRadius()/2);
        bal.setCenterY(model.getYAs());
        bal.setFill(Color.RED);
    }

    public Button getStart(){
        return this.start;
    }

    public Button getStop(){
        return this.stop;
    }

    public void adjust(){
        bal.relocate(model.getXAs(), model.getYAs());
    }

}
控制员:

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.util.Duration;

public class Controller {
    View view;
    Model model;
    Timeline animatie;

    private int yAsPositie = 1;

    public Controller(View view, Model model){
        this.view = view;
        this.model = model;

        animatie = new Timeline(new KeyFrame(Duration.millis(10), e -> beweegBal()));
        animatie.setCycleCount(Timeline.INDEFINITE);
        view.getStart().setOnAction(e -> animatie.play());
        view.getStop().setOnAction(e -> animatie.stop());

    }

    public void beweegBal(){
        model.setYAs(model.getYAs() + yAsPositie);

        view.adjust();
    }
}
启动(应用程序)


如果你运行它,你会注意到它向右跳了一点,在上面停留了几个小时。

看起来你正在将
model.xAs
解释为球的左边缘的x坐标,因为你在重新定位它时使用它作为x坐标。在这种情况下,您肯定需要使用

bal.setCenterX(model.getXAs()+bal.getRadius());
因为圆的半径是从中心到边缘的距离。

Hi Nerotix,
bal.setCenterX(model.getXAs()+bal.getRadius());