java - 如何在 IF 语句中定位随机颜色变量?

标签 java javafx

我有一个问题是从我上一篇文章中选择的最佳答案中得出的: How can I use randomisation to specify different object parameters to a single iteration in a loop?我是堆栈新手,不确定引用该帖子的最佳方式。

我已经按照上面帖子的建议编写了代码,但是,现在我正在尝试让一种方法根据通过我的“球”对象交互的“砖 block ”的颜色运行不同的代码行:

public Color brickColour;


public GameObj( int x, int y, int w, int h, Color c ){
        topX   = x;       
        topY = y;
        width  = w; 
        height = h; 
        colour = c;
}

public void initialiseGame(){
    Random random = new Random();
    int yellowBrick = random.nextInt(5);
    for (int i = 0; i < 5; i++) {
        brickColour = i == yellowBrick ? Color.YELLOWGREEN : Color.BLUE;
        GameObj brick = new GameObj(i*100, 100, BRICK_WIDTH, BRICK_HEIGHT, brickColour);
        brick.moveX(75);
        brick.visible = true;
        bricks.add(brick);
        System.out.println("Model:: Create Brick =" + brick);
    }
}

public synchronized void updateGame(){
           for(GameObj brick: bricks){
                if (ball.hitBy(brick)){
                    if(brickColour.equals(Color.YELLOWGREEN)){
                        ball.changeDirectionY();
                        addToScore(HIT_BRICK);
                        brick.visible = false;
                        Debug.trace("Model::Brick Hit YELLOWGREEN = " + brick);
                        startGame();
                    }else {
                        ball.changeDirectionY();
                        addToScore(HIT_BRICK);
                        brick.visible = false;
                        Debug.trace("Model::Brick Hit = " + brick);
                    }
                }
            }
}

我已经测试了该程序,当 YELLOWGREEN 'brick' 被击中时,它仍在运行 else 语句。然后我打印了brickColour变量并得到了“0x0000ffff”,尽管如此,即使将其用作color.equals()参数中的字符串,它也不起作用。我该如何准确定位黄绿色砖 block 对象?

最佳答案

您的问题在于:

brickColour = i == yellowBrick ? Color.YELLOWGREEN : Color.BLUE;

您已在此处定义了一个全局变量,并且正在使用其中最新的一组变量。您应该将其设为局部变量,而不是在方法之间重复使用它。

for (int i = 0; i < 5; i++) {
    Color brickColour = i == yellowBrick ? Color.YELLOWGREEN : Color.BLUE;
    GameObj brick = new GameObj(i*100, 100, BRICK_WIDTH, BRICK_HEIGHT, brickColour);
    // omitted for answer
}

然后在进行检查时:

for(GameObj brick: bricks){
    if (ball.hitBy(brick)){
        if(brick.brickColour == Color.YELLOWGREEN) {
             // yellow logic
        } else {
             // blue logic
        }
    }
}

当然,使用颜色本身就是一个相当糟糕的设计决策。相反,您希望有一个 GameObj 的属性来声明其砖 block 类型,并具有由砖 block 类型确定的颜色。但这与本次讨论无关。

这里的教训是让变量的范围仅限于必要的范围。如果不需要,就不要使用全局变量,尽可能使用局部变量。

关于java - 如何在 IF 语句中定位随机颜色变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60291055/

相关文章:

java - JComboBox:选择后出现错误的形式

java - 对象在Java游戏中应该如何

java - Hibernate Criteria,createAlias() 如果 Alias 为 Null

全屏 Java Fx 整个应用程序

java - 使用 JavaFX 浏览器/WebEngine (Gradle) 构建 swing 项目

java - JMeter - 为循环 Controller 设置动态变量

java - ITextRenderer 在所有 pdf 文件中重复相同的标题

JavaFX Spring Boot @Autowire 服务为空

java - SwingFXUtils 图像序列化替代方案(Javafx、Swing、Raspberry Pi)

javafx - 如何改变TableView的选择行为?