将 .getPixelColor 与机器人一起使用 class
Using .getPixelColor with Robot class
你好 Whosebug,
我目前正在 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) Color.BLACK 定义了一个等于 255 的 alpha 分量。AWTRobot
正在阅读屏幕,可能 return 也可能不是一个 alpha 分量。你必须检查一下。
2) 由 AWTRobot
编辑的颜色 return 不一定嵌入到代表 AWT 库内部颜色 "black" 实例的 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.");
}
你好 Whosebug,
我目前正在 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) Color.BLACK 定义了一个等于 255 的 alpha 分量。AWTRobot
正在阅读屏幕,可能 return 也可能不是一个 alpha 分量。你必须检查一下。
2) 由 AWTRobot
编辑的颜色 return 不一定嵌入到代表 AWT 库内部颜色 "black" 实例的 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.");
}