球向右逐渐消失

问题描述 投票:0回答:1

我的任务是编写一个程序,使圆球随着球向右移动而逐渐消失。但这是行不通的,当拖动鼠标但不透明度相同时,我可以使球移动。你们能帮我吗?我不知道如何将不透明度值转换为double

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;   
   }
}
java javafx opacity
1个回答
0
投票

首先,将绑定移出事件处理程序。绑定将确保centerX属性更新时始终更新不透明度。

第二,不要设置绑定值;无论如何,事件处理程序的最后两行只是将不透明度设置为其当前值。

第三,不透明度应该在0到1之间。您希望当centerX为0时为1,而当centerX为300(或通常是窗格的宽度)时为0。]

您需要的是

opacity = 1 - ball.centerX / root.width
        = (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;   
 }
© www.soinside.com 2019 - 2024. All rights reserved.