首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乘坐JavaFX飞机

乘坐JavaFX飞机
EN

Code Review用户
提问于 2015-03-18 21:58:22
回答 2查看 553关注 0票数 8

只是我教育旅行的又一步。我不知道什么时候/为什么我会使用透明特性,在实验中,我做了这个。

这幅画一旦完成就很有趣。这是一个动画飞行的gif,你可以移动它在屏幕周围,并按下键来改变它的速度或添加效果到图像本身。

代码语言:javascript
复制
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.effect.Bloom;
import javafx.scene.effect.Glow;
import javafx.scene.effect.MotionBlur;
import javafx.scene.effect.Reflection;
import javafx.scene.effect.Shadow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class AnimatedFun extends Application {
    int animationSpeed = 5;

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

    @Override
    public void start(Stage stage) {
        ImageView view = new ImageView(new Image("https://d2aao99y1mip6n.cloudfront.net/images/runes/idols/eJ8HJ8Ge9Ae9Be9Ae9Bj9Fj9Geigtzillnuhymn.gif"));
        view.setEffect(new Glow());
        view.setOnMouseClicked(e -> stage.close());
        view.setFocusTraversable(true);
        view.setOnKeyPressed(e -> { 
            if (e.getCode() == KeyCode.ESCAPE) {    
                stage.close();
            } else if (e.getCode() == KeyCode.SPACE) {
                view.setEffect(new Reflection());
            } else if (e.getCode() == KeyCode.DELETE) {
                view.setEffect(null);
            } else if (e.getCode() == KeyCode.ENTER) {
                view.setEffect(new Bloom());
            } else if (e.getCode() == KeyCode.SHIFT) {
                view.setEffect(new Shadow());
            } else if (e.getCode() == KeyCode.RIGHT) {
                stage.setX(stage.getX() + animationSpeed);
            } else if (e.getCode() == KeyCode.LEFT) {
                stage.setX(stage.getX() - animationSpeed);
            } else if (e.getCode() == KeyCode.UP) {
                stage.setY(stage.getY() - animationSpeed);
            } else if (e.getCode() == KeyCode.DOWN) {
                stage.setY(stage.getY() + animationSpeed);
            } else if (e.getCode() == KeyCode.CONTROL) {
                animationSpeed += 3;
                if (animationSpeed >= 15) {
                    view.setEffect(new MotionBlur());
                }
            } else if (e.getCode() == KeyCode.ALT) {
                if (animationSpeed >= 15 && animationSpeed < 18){
                    view.setEffect(new Glow());
                }
                animationSpeed = (Math.max(5, animationSpeed - 2));
            }
        });

        Group root = new Group();
        root.getChildren().add(view);

        stage.setScene(new Scene(root, Color.TRANSPARENT));
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.getIcons().add(new Image("https://d2aao99y1mip6n.cloudfront.net/images/runes/lg/eJ8HJ8Ge9Ae9Be9Ae9Bj9Fj9Geigtzillnuhymn.jpg"));
        stage.show();
    }
}

感受自由的下载运行的罐子。

我想全面回顾一下它目前的状态,以及任何适当的改进,无论是关于JavaFX公约,还是仅仅是一般性结构。

请原谅使用在线链接对图像进行移植的水平混乱、副作用。

EN

回答 2

Code Review用户

回答已采纳

发布于 2015-04-26 06:35:41

最好将这个片段中出现的所有数字移到描述性命名的常量字段中:

} else if (e.getCode() == KeyCode.CONTROL) { animationSpeed += 3; if (animationSpeed >= 15) { view.setEffect(new MotionBlur()); } } else if (e.getCode() == KeyCode.ALT) { if (animationSpeed >= 15 && animationSpeed < 18){ view.setEffect(new Glow()); } animationSpeed = (Math.max(5, animationSpeed - 2)); }

如果您给出这些数字的名称,代码将变得更加直观。它还将减少必须在多个地方更新的值更改中的错误,例如animationSpeed >= 15中的数字15。

如果将常量放在类的首位,那么在一个地方调整有趣的参数将更容易,而不是在代码中翻找。

同样,也可以将图像urls放在常量中。你有两个不同的联系,但不明显的区别是什么。通过将这些值放入指定的常量中,就会变得清晰起来。线条应该稍微变宽一点。

票数 1
EN

Code Review用户

发布于 2015-03-21 04:04:15

我会把那个巨大的if/else块拉到switch块中。

这将使您的代码更具可读性。(性能也略有改善。)现在很难看到逻辑,因为它隐藏在代码复制的后面。看看开关块如何使您很容易看到可能的密钥及其相应的行为。

代码语言:javascript
复制
switch(e.getCode()) {
    case(KeyCode.ESCAPE) :  stage.close(); break;
    case(KeyCode.DELETE) :  view.setEffect(null); break;
    case(KeyCode.SPACE)  :  view.setEffect(new Reflection()); break;
    ...
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/84421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档