You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

棋盘游戏开发求助:点击矩形按颜色切换出现类型匹配错误

Hey there! Let's break down what's going on here and fix that issue for you.

问题分析与解决方案

为什么会出现这个错误?

那个 Unlikely argument type for equals(): Color seems to be unrelated to Rectangle 错误,本质是你在把Rectangle对象和Color对象直接用equals()比较了。比如你可能写了类似这样的错误代码:

if (eve.getSource().equals(Color.BLUE)) {
    // 尝试切换颜色的逻辑
}

eve.getSource() 返回的是触发点击事件的Rectangle实例,和Color完全是不同类型的对象,equals()会直接返回false,导致你的颜色切换逻辑根本没触发,最后走到了默认分支(比如没匹配到任何条件时设置成黑色),这就是方块变黑的原因。

正确的实现方式

你需要先获取点击的Rectangle的填充颜色,再和目标颜色对比。假设你用的是JavaFX(从Rectangle和MouseEvent的使用场景判断),下面是修正后的代码示例:

public void game(MouseEvent event) {
    // 1. 将事件源强转为Rectangle(确保点击的是棋盘方块)
    Rectangle clickedSquare = (Rectangle) event.getSource();
    
    // 2. 获取方块当前的填充色,注意要转成Color类型(因为fill是Paint类型)
    Color currentColor = (Color) clickedSquare.getFill();
    
    // 3. 对比颜色,执行切换逻辑
    if (currentColor.equals(Color.BLUE)) {
        // 点击蓝色方块时切换为灰色
        clickedSquare.setFill(Color.GRAY);
    } 
    // 可按需添加更多颜色切换规则
    else if (currentColor.equals(Color.GRAY)) {
        // 比如灰色方块点击后切回蓝色
        clickedSquare.setFill(Color.BLUE);
    }
    // 如果需要默认点击行为,再补充else分支
}

额外注意事项

  • 如果你的颜色是自定义的(不是JavaFX内置的Color.XXX),要确保用equals()而不是==来比较(==比较对象引用,equals()比较颜色的RGB值,更准确)。
  • 确认所有棋盘方块都正确绑定了这个game事件处理方法,不然点击不会触发颜色切换逻辑。

内容的提问来源于stack exchange,提问作者CellarMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:17:30