java - 找不到问题在哪里

原文 标签 java android

可以说我得到2个球,其中一个叫gball,另一个叫blueb。
我基本上想做的是每次我的球中心点(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);
    }           
  }


注意:球中心在(x-test.getWidth()/ 2,y-test.getHeight()/ 2)中
而40是blueb半径。

最佳答案

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

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


条件评估为true的唯一方法是“测试”的中心是否在“ x”的中心。 “ x”的中心不能小于和大于一个值。因此这仅在平等情况下成立。我假设您有一些物理系统或用户输入来移动球,这意味着它很少会满足完全相等的情况,但它们会重叠很多。

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

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

相关文章:

android - 在Android Studio中自定义TextInputLayout和EditText

java - JSTL 和 Java 哪个更快?

java - MultiResourceItemReader-如果标题无效,则跳过整个文件

android - 使用AbstractThreadedSyncAdapter同步Android数据库:不调用onPerformSync

android - 没有QuickAction的Android EditText

android - 是否可以通过Web界面远程查询设备上的数据库?

java - Android XML解析:解析这种特殊的XML类型,对此我一无所知

java - Android BroadCast Receiver Thread通知删除SD卡

java - 如何将License.txt添加到Maven项目

java - 我可以使用Java将数据插入数据库中,但是无法选择并显示它