将.getPixelColor与Robot类一起使用

时间:2017-05-23 18:22:01

标签: java awtrobot

你好StackOverflow,

我目前正在用Java创建一种测试迷宫游戏,我在Photoshop中使用黑白颜色制作了一个简单的地图。我希望我的角色不能交叉或穿过这些黑色区域,所以我决定使用AWTRobot" .getPixelColor()"方法。但是,它似乎不起作用。这是我的代码:

switch( keyCode1 ) { 
        case KeyEvent.VK_UP:
            thomasY -= 7;
            thomasLabel.setLocation(thomasX, thomasY);
                break;
        case KeyEvent.VK_DOWN:
            System.out.println("Color:  " + robot.getPixelColor(thomasX + frame.getX(),  thomasY+ frame.getY() + thomasLabel.getHeight() + 1));
            if (robot.getPixelColor(thomasX + frame.getX(), thomasY + frame.getY() + thomasLabel.getHeight() + 1) == Color.BLACK)
            {
                System.out.println("At Wall!");
            }
            thomasY += 7;
            thomasLabel.setLocation(thomasX, thomasY);
                break;
        case KeyEvent.VK_LEFT:
           thomasX -= 7;
           thomasLabel.setLocation(thomasX, thomasY);
          thomasLabel.setIcon(imageThomas);
                break;
        case KeyEvent.VK_RIGHT :
            thomasX += 7;
            thomasLabel.setLocation(thomasX, thomasY);
            thomasLabel.setIcon(imageThomasRight);
                break;
    }

这是我的角色移动代码,正如您所看到的,每当用户按下向下箭头时,它将尝试显示其所在像素的颜色。但是,它似乎没有正确注册,在其特定位置显示不同的颜色或错误的颜色。有人可以帮我正确地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

两个问题:

1)Color.BLACK定义为alpha分量等于255. AWTRobot正在读取屏幕,可能会也可能不会返回alpha分量。你必须检查一下。

2)AWTRobot返回的颜色不一定要插入到代表AWT库内部颜色“黑色”实例的Object中。你正在检查身份;你需要检查对象内容是否相等。

Color c1 = new Color(0,0,0);
Color c2 = new Color(0,0,0);

if (c1 == c2) {
   System.out.println("Will never get here");
}

if (c1.equals(c2)) {
   System.out.println("The colours (including alpha) are the same.");
}