Java 球向右转时逐渐消失
我的任务是编写一个程序,使一个圆球随着球向右移动而逐渐消失。但它不起作用,我可以在拖动鼠标时使球移动,但不透明度是相同的。你们能帮帮我吗?我不知道如何将不透明度值转换为双精度Java 球向右转时逐渐消失,java,javafx,opacity,Java,Javafx,Opacity,我的任务是编写一个程序,使一个圆球随着球向右移动而逐渐消失。但它不起作用,我可以在拖动鼠标时使球移动,但不透明度是相同的。你们能帮帮我吗?我不知道如何将不透明度值转换为双精度 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.Pane; import javafx.scene.shape.Ci
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
public class Project3 extends Application
{
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
Pane root = createRootPane();
Scene scene1 = new Scene(root);
primaryStage.setScene(scene1);
primaryStage.setTitle(" Hai Vo ");
primaryStage.show();
}
public Pane createRootPane()
{
Circle ball = new Circle (100,50,25);
Pane root = new Pane(ball);
root.setMinSize(300,300);
root.setOnMouseDragged (
event ->
{
double x = event.getX();
ball.setCenterX(event.getX());
ball.setCenterY(event.getY());
ball.opacityProperty().bind(ball.centerXProperty());
double opacity = ball.opacityProperty();
ball.setOpacity(opacity);
} );
return root;
}
}
首先,将绑定移出事件处理程序。绑定将确保在
centerX
属性更新时始终更新不透明度
第二,不要设置界限值;事件处理程序的最后两行只是将不透明度设置为其当前值
第三,不透明度应介于0和1之间。当centerX
为0时,您希望它为1;当centerX
为300(或通常为窗格宽度)时,希望它为0
您需要的是(伪代码)
opacity=1-ball.centerX/root.width
=(球心/球根宽度)*(-1)+1
可以在绑定中使用
ball.centerXProperty()
.divide(root.widthProperty())
.multiply(-1)
.add(1)
因此,总而言之,您需要:
public Pane createRootPane() {
Circle ball = new Circle (100,50,25);
Pane root = new Pane(ball);
ball.opacityProperty().bind(
ball.centerXProperty()
.divide(root.widthProperty())
.multiply(-1)
.add(1)
);
root.setMinSize(300,300);
root.setOnMouseDragged (
event ->
{
ball.setCenterX(event.getX());
ball.setCenterY(event.getY());
} );
return root;
}
在这一行中,
duble opacity=ball.opacityProperty()
,我认为您只需要修复拼写并可能对其进行类型转换:double opacity=(double)ball.opacityProperty()代码>哦,是的,我修复了它,但是关于转换的错误仍然是一样的。事件处理程序的最后两行没有任何意义,无论是否有拼写错误。您绑定了属性,因此在解除绑定属性之前无法直接赋值。你很可能会得到一个完全不透明的圆,因为不透明度的范围是[0,1]
,而且向右移动会增加x值,因此根据最大x值缩放值后不透明度evne…好的,对不起,我学习速度慢,你是说我不应该把不透明度和x值绑定,因为不透明度在[0,1]之内,而x值可以无穷大?那你建议如何修复它呢?它就像一个符咒,你能给我解释一下“ball.opacityProperty……”这句话吗?它具体在做什么?它在玩弄什么价值观?对不起,我是新的编码,所以基本上,只是一个NoOB。@ HaiVo,如果它像一个魅力的工作,考虑答案。