gpt4 book ai didi

java - 为什么我无法使用 robots.getPixelColor 让红球停在蓝盒子上?

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:18 25 4
gpt4 key购买 nike

标题。 GUI 如下所示:Ball Puzzle GUI

下面的代码是我的计时器任务的代码,负责控制球的向下运动,调用者:

timer.scheduleAtFixedRate(moveDown, 0, 20);

每当按下箭头键时,球就会不断地朝该方向移动,直到遇到一个正方形。我知道我现在正在使用 .cancel(),但我打算通过暂时暂停 TimerTask 来解决这个问题。

虽然不向 X 或 Y 值添加任何内容,但球永远不会停止。 (我应该提到,当它到达底部时,它会循环回顶部)当不改变 X 或 Y 值时,输出的颜色似乎会改变。例如,第一次在(0,360)时,输出的颜色是(208,208,208),而下一次在(0,360)时,输出的颜色是(240,240,240)。

当添加我认为会停止在盒子边缘的内容时,Y + 51,它仍然没有停止。检测到的唯一颜色是 (208,208,208),它是灰色的。

如果我同时添加Y + 51和X + 25,球仍然不会停止,并且只输出灰色。请注意,我已将速度更改为 1,这没有什么区别。

现在,运气好的话,我发现如果我在 Y 上加上 80,在 X 上加上 25,它就会停在盒子的边缘。

我还发现,如果我为负责向上移动球(速度为负)的 TimerTask 在 Y 轴上添加 25,在 X 轴上添加 25,球将在距离框边缘 1 个像素处停止。

   public void run() {
try {
Robot robot = new Robot();
int y = ball.positionY + 80;
int x = ball.positionX + 25;

System.out.println(ball.positionX);
System.out.println(ball.positionY);

color = robot.getPixelColor(x, y);

System.out.println("Red = " + color.getRed());
System.out.println("Green = " + color.getGreen());
System.out.println("Blue = " + color.getBlue());

} catch (AWTException e) {

e.printStackTrace();

}

if((color.getRed() == 0) && (color.getGreen() == 0) && (color.getBlue() == 255)){

moveDown.cancel();
moving = false;

}

else{

ball.positionY += 5;

if (ball.positionY > 670) {

ball.positionY = 0;

}
}

ball.repaint();
}

有谁知道到底发生了什么吗?我还无法弄清楚右/左方向,因为似乎没有模式。

最佳答案

机器人并不是检测方 block 的可靠方法。双缓冲可能意味着您的像素实际上并未显示。

由于您自己的代码正在绘制正方形,因此请将这些正方形的坐标保留在私有(private)字段中,并使用它们来检查碰撞而不是检查像素颜色:

private final Collection<Rectangle> squares = new ArrayList<>();

// ...

if (squares.stream().anyMatch(sq -> sq.contains(x, y))) {
moveDown.cancel();
moving = false;
} else {
ball.positionY += 5;
if (ball.positionY > 670) {
ball.positionY = 0;
}
}

另请注意 Swing is not safe for use by multiple threads 。您应该使用javax.swing.Timer而不是 java.util.Timer,因为它在 AWT 事件调度线程中正确执行其任务。

关于java - 为什么我无法使用 robots.getPixelColor 让红球停在蓝盒子上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com