gpt4 book ai didi

java - 为按钮生成随机位置

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:05 26 4
gpt4 key购买 nike

我正在制作一个简单的游戏。我有 6 个按钮,每次我都想在不同位置随机播放它们。

所以我做了一个简单的方法来实现这个。

    private void changeButtonPlace(ImageView button) {
Random r = new Random();
int newXloc = r.nextInt(getScreenWidth() - (2 * button.getLayoutParams().width));
int newYloc = r.nextInt(getScreenHeight() - (3 * button.getLayoutParams().height));
button.setX(newXloc);
button.setY(newYloc);
}

它工作得很好,但有时按钮会相互覆盖,这意味着它会出现在几乎相同的位置。我希望每个按钮都位于一个独特的位置,并且不要触摸其他按钮。

知道我该如何实现吗?提前致谢!

最佳答案

你要找的是碰撞检测,我的回答会大大简化这个过程。我建议搜索碰撞检测算法以了解更多信息。

因此,对于 super 简单的开始,我们可以比较 2 个盒子的位置、长度和高度。对于我的例子,我将假设这些盒子的原点是它们的左上角。

if((boxA.xPos + boxA.length ) < boxB.xPos || boxA.xPos > (boxB.xPos + boxB.length))

这将检查两个框是否沿 x 轴接触,我们也可以更改 y 轴的值

if((boxA.yPos + boxA.height ) < boxB.yPos || boxA.yPos > boxB.yPos + boxB.height)

现在,这不是一种非常有效的方法。有许多更好的方法可以简化此逻辑并节省资源。但是,它又快又脏,对于像只包含 6 个按钮的简单游戏这样的小型应用程序来说可能已经足够好了。

因此,对于这两个方程式,您可以将它们嵌套然后在其中运行碰撞代码,或者您可以将它们一起或运算成一个方程式,如下所示:

if(((boxA.yPos + boxA.height) < boxB.yPos || boxA.yPos > (boxB.yPos + boxB.height)) || ((boxA.xPos + boxA.length ) < boxB.xPos || boxA.xPos > (boxB.xPos + boxB.length)))

一行要读的内容很多,如果您刚开始,我建议您将它们嵌套起来,这样您就可以更好地了解方程式中的逻辑流程。但是,请记住 future ,如果您需要压缩那些额外的性能,或者将它们组合到一个 if 语句是好的开始。

关于java - 为按钮生成随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034967/

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