Для полноты я предоставил весь код ниже.Java: проблема с некоторым синтаксисом кода
Пожалуйста, помогите мне перевести следующее английское:
protected void moveBall() {
for (Node node:this.getChildren()) {
Ball ball = (Ball)node;
// некоторый другой код.
Вот моя (неверная) интерпретация:
Получить ссылку на узел, и установить ссылку равной для всех узлов в этом классе.
Получите ссылку на Ball и установите его равным узлу, который должен быть отлит как Ball.
Кроме того, не зная, как интерпретировать вышеупомянутый код, я также не понимаю, что он делает.
Второй вопрос о классе окружности:
class Ball extends Circle {
private double dx = 1;
private double dy = 1;
public Ball (double x, double y, double radius, Color color) {
super(x,y,radius);
setFill(color);
}
}
бы применение супер метод эквивалентен следующему:
this.x = x;
this.y = y;
this.radius = radius;
почему или почему нет?
MultipleBounceBalls общественный класс расширяет Application {
public void start(Stage primaryStage) {
MultipleBallsPane ballsPane = new MultipleBallsPane();
Button btnAddBall = new Button("+");
Button btnRemoveBall = new Button("-");
HBox hBox = new HBox();
hBox.getChildren().addAll(btnAddBall, btnRemoveBall);
hBox.setAlignment(Pos.CENTER);
//add or remove ball
btnAddBall.setOnMousePressed(e -> ballsPane.add());
btnRemoveBall.setOnMousePressed(e -> ballsPane.subtract());
//resume and pause animation
ballsPane.setOnMousePressed(e -> ballsPane.pause());
ballsPane.setOnMouseReleased(e -> ballsPane.play());
//scroll bar to control animation speed
ScrollBar sbSpeed = new ScrollBar();
sbSpeed.setMax(20);
sbSpeed.setMin(10);
ballsPane.rateProperty().bind(sbSpeed.valueProperty());
HBox hBox2 = new HBox();
hBox2.getChildren().addAll(sbSpeed);
hBox2.setAlignment(Pos.CENTER);
BorderPane pane = new BorderPane();
pane.setTop(hBox2);
pane.setCenter(ballsPane);
pane.setBottom(hBox);
Scene scene = new Scene(pane,250, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
// inner class MultipleBallsPane
private class MultipleBallsPane extends Pane {
private Timeline animation;
public MultipleBallsPane() {
//create an animation for moving the ball
animation = new Timeline(
new KeyFrame(Duration.millis(50), e->moveBall()));
animation.setCycleCount(Timeline.INDEFINITE);
animation.play();
}
public void add() {
Color color = new Color(Math.random(),
Math.random(), Math.random(), 0.5);
getChildren().add(new Ball(30,30,20, color));
}
public void subtract() {
if (getChildren().size() > 0) {
getChildren().remove(getChildren().size() - 1);
}
}
public void play() {
animation.play();
}
public void pause() {
animation.pause();
}
public void increaseSpeed() {
animation.setRate(animation.getRate() + 0.5);
}
public void decreaseSpeed() {
if (animation.getRate() > 0) {
animation.setRate(animation.getRate() - 0.5);
}
}
public DoubleProperty rateProperty() {
return animation.rateProperty();
}
protected void moveBall() {
for (Node node:this.getChildren()) {
Ball ball = (Ball)node;
//check boundaries
if (ball.getCenterX() < ball.getRadius() ||
ball.getCenterX() > getWidth() - ball.getRadius()) {
ball.dx*= -1;
}
if (ball.getCenterY() < ball.getRadius() ||
ball.getCenterY() >getHeight() - ball.getRadius()) {
ball.dy*= -1;
}
ball.setCenterX(ball.dx + ball.getCenterX());
ball.setCenterY(ball.dy + ball.getCenterY());
}
} // end of method
class Ball extends Circle {
private double dx = 1;
private double dy = 1;
public Ball (double x, double y, double radius, Color color) {
super(x,y,radius);
setFill(color);
}
}
} // end of MultipleBallsPane class
}
Если у вас есть два разных вопроса, задайте два разных вопроса. Не вежливо спрашивать двух в одном, поскольку это связывает фактические проблемы (проблемы), которые у вас есть. – Makoto
Я не хочу наводнять вас другим ответом, но другие ответы, похоже, не затрагивают ваш вопрос о круге должным образом. Предполагая, что вы вызываете javafx.scene.shape.Circle (двойной, двойной, двойной), то нет, они не эквивалентны. Вызов этого конструктора Circle немного сложнее. Вы можете проследить через код здесь: http://grepcode.com/file/repo1.maven.org/maven2/net.java.openjfx.backport/openjfx-78-backport/1.8.0-ea-b96.1/ javafx/scene/shape/Circle.java # Круг.% 3Cinit% 3E% 28double% 2Cdouble% 2Cdouble% 29 – searchengine27
Благодарим за отзыв. Приношу свои извинения, я обязательно буду задавать один вопрос одновременно. – Frosty619