android - 随机放置对象时避免 Canvas 中的特定范围

标签 android android-canvas ondraw

我将对象放置在屏幕( Canvas )上的随机位置:

 public float X=Rnd.nextInt((MainGamePanel.width - 60) - 20) + 20;
 public float Y=Rnd.nextInt((MainGamePanel.height - 30) - 30) + 30;

这很好用。现在;如果我想避免将对象放置在 (40,50) - (60,80).. 例如,因为我在那里有一个按钮,我不希望按钮被可见对象覆盖。

当然,我可以实现一个“checkposition”例程,如果对象位置位于按钮区域内的某处,它会重新随机化。但这是最好的(最干净、最简洁、最快的)解决方案吗?谢谢你的想法!

最佳答案

创建对象的固定时间

在四个区域创建对象,而不是一个。

拥有多于一组 (x,y) 的随机数,并根据每个区域的大小拆分每个中创建对象的百分比。如果你能想象出按钮区域外四个紧贴在一起的矩形,那么你就有了你的区域。这取决于您创建的对象数量和您正在寻找的效果。

这可能是一个糟糕的想法,但如果您有时随机地想要在屏幕的一部分中放置很多对象,因为您正在强制分配。另外,如果您想要屏幕上其他地方的另一个按钮,而不是与当前按钮相邻怎么办?有很多区域可能会有点乱。

此解决方案的优势在于创建所有对象所需的时间是可预测的。每次都应该相同。

创建对象的时间可变

使用 checkPostion() 方法。

使用 checkPostion() 方法并获取新的随机数可能更容易。如果您对此很聪明,您应该意识到在很多情况下您只需要“重新滚动”一个坐标而不是两个坐标。

关于android - 随机放置对象时避免 Canvas 中的特定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443177/

相关文章:

android - kotlin 中的 ServerValue.TIMESTAMP firestore

android - android中的位图圆形裁剪

android - 映射 event.getRawX() 和 event.getX()

Android - 计算弧角

android - 在 onDraw() 内部调用 invalidate() 是一个好的编程习惯吗?

Android:onDraw 太慢

安卓 map : how to determine map center after a drag has been completed

java - 如何从 Fragment 类中的 URL 加载图像?

Android canvas,如何从现有路径中获取子路径?

android - 无法在 Fragment 中找到当前位置