java - 鼠标悬停时图 block 会更改颜色 - 防止一次选择多个图 block

标签 java graphics

我正在创建一个战舰游戏,每轮玩家都可以通过用鼠标选择距离他最近的 4 个方 block 来选择 4 条航线。

现在,在下面的 gif 中,您可以看到我是否将鼠标悬停在图 block 的最边缘,它会一次选择两个图 block ,如果您将鼠标放在 4 个图 block 的中间,甚至一次选择 4 个图 block :

gif
(来源:gyazo.com)

这不应该在游戏中真正发生,我该如何防止这种情况发生?

这是更新代码:

/**
 * 
 * @param x mouse X
 * @param y mouse Y 
 */
public void checkHover(int x, int y) {
    for (int i = 0; i < tiles[0].length; i++) {
        for (int j = 0; j < tiles[1].length; j++) {

            // get coordinates from tile
            int x1 = i * (sprite.getWidth() - 1);
            int y1 = j * (sprite.getHeight() - 1);  

            // If we have screen translate, we can cancel it for 
            // this situation
            int realX = x - this.translate.getX();
            int realY = y - this.translate.getY();

            // checking if mouse inside tile
            if (realX >= x1 && realX <= x1 + sprite.getWidth() &&
                    realY >= y1 && realY <= y1 + sprite.getHeight()) {
                // set tile to hovered sprite
                this.tiles[i][j].setHover(true);
            }
            else {
                // cancel hovered sprite
                this.tiles[i][j].setHover(false);
            }
        }
    }
}

如何防止这种情况发生?

最佳答案

我将根据鼠标的 x 和 y 位置计算 2d 数组的索引,而不是两个循环,方法是将 x 和 y 位置除以从一个图 block 到下一个图 block 的空间大小(看起来是图 block 宽度加 1,即空边框)。这将导致边框悬停偏向某一侧,但看起来您无论如何都不想选择两个图 block 。

获得图 block 的索引后,打开突出显示,并使用 lastHighlightedTile 等实例变量保留对其的引用,但在此之前,还要调用 lastHighlightedTile.setHover(false);

如果图 block 的索引无效,就像鼠标超出了图 block 区域一样,请不要访问该数组,仍然调用 lastHighlightedTile.setHover(false);

这应该可以修复突出显示多个图 block 的问题,并且还允许您关闭之前的突出显示(打破当前循环的解决方案可能不会关闭之前的突出显示)。

关于java - 鼠标悬停时图 block 会更改颜色 - 防止一次选择多个图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541052/

相关文章:

java - 使用 BufferedImage 生成缩略图,无需反转颜色并在 Java 中获得 alpha

java - 如何针对损坏的服务器测试客户端实现?

java - HTML 表单提交后 Tomcat 8 重定向

c++ - 用鼠标在 OpenGL GLUT 中绘制多边形

java - Canvas 和 JPanel 的区别

c++ - 如何使用 opengl 或 dx 从网格生成深度(高度)图像

java - 在 Java 中实现双缓冲

java - 如何获取 en_<COUNTRY> 格式的区域设置列表

java - JPA 标准 JOIN : what does {oj . ..} 在 SQL 中意味着什么?

java - 如何访问第三方库中 protected Java 方法?