java - 找不到问题所在

标签 java android

假设我有 2 个球,1 个名字为 gball,另一个为 blueb。 我基本上想做的是每次我的 gball 中心点(x,y) 在blueb里面 blueb 会将位置更改为随机位置 问题是 blueb 不会改变位置并且音频不起作用(MyAudio 是启动音频的类)。 这是我的代码;

@Override
public void run() {
Random r = new Random();
int rX = r.nextInt(350  + 1);
int rY = r.nextInt(450  + 1);

while (isRunnning) {
  if(!ourHolder.getSurface().isValid())
    continue;

  Canvas canvas=ourHolder.lockCanvas();
  canvas.drawColor(Color.BLACK);

  if(x !=0 && y!=0){
    Bitmap test=BitmapFactory.decodeResource(getResources(),R.raw.ball);
    canvas.drawBitmap(test, x-test.getWidth()/2, y-test.getHeight()/2, null);

    Bitmap blueb=BitmapFactory.decodeResource(getResources(), R.raw.bball);
    canvas.drawBitmap(blueb, rX, rY, null);

    if(x-test.getWidth()/2 <=rX+40 && x-test.getWidth()/2 >=rX-40 && y-test.getHeight()/2 <=rY+40 &&   y-test.getHeight()/2 >=rY-40 ) {
      MediaPlayer mp1=MediaPlayer.create(GFXSurface.this, R.raw.im);
      MyAudio beep=new MyAudio(mp1);
      beep.getAudio().start();

      rX = r.nextInt(350  + 1);
      rY = r.nextInt(450  + 1);
      canvas.drawBitmap(blueb, rX, rY, null);
    }           
  }

注意:gball 中心位于 (x-test.getWidth()/2, y-test.getHeight()/2) 40 是 blueb 半径。

最佳答案

检查球是否重叠的条件需要工作。仔细看..

x-test.getWidth()/2 <=rX+40 && x-test.getWidth()/2 >=rX-40

条件评估为 true 的唯一方法是“test”的中心是否位于“x”的精确中心。 'x' 的中心不能同时小于和大于某个值;所以这仅在 equals 情况下成立。我假设你有一些物理系统或用户输入来移动球,这意味着它很少满足完全相等的情况,但它们会重叠很多。

您应该做的是获取每个球的半径,将它们加在一起,然后检查“x”中心和“test”中心之间的距离是否小于组合半径。这会让您知道它们是否重叠。

关于java - 找不到问题所在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689673/

相关文章:

用于订阅的 Java 监听器设计模式

android - 为 native 应用程序 webview 设置 cookie

android - 运行 Android ActivityUnitTestCase 结果为 "RuntimeException: could not find test class"

android - Android 版 Eclipse : How to automate 'Export Android Application' to apk?

java - Android - 使用 XPath 从 XML 检索值

java - 如何在 tomcat 访问日志中记录线程上下文值

java - 使用Spring批量选择

java - Android Function 返回一个数组直接变成变量

java - 比较 excel 中的列

安卓 logcat 错误