你好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;
}
这是我的角色移动代码,正如您所看到的,每当用户按下向下箭头时,它将尝试显示其所在像素的颜色。但是,它似乎没有正确注册,在其特定位置显示不同的颜色或错误的颜色。有人可以帮我正确地做到这一点吗?
答案 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.");
}