Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二维冲突位图的问题_Java_Android_Collision Detection - Fatal编程技术网

Java 二维冲突位图的问题

Java 二维冲突位图的问题,java,android,collision-detection,Java,Android,Collision Detection,位图A有一个位置,它的X/Y位置是静态的,位图B是移动位图,它从屏幕底部移动到用户在屏幕上触摸的任何位置。当移动位图到达静态位图,但未被识别为冲突时,移动位图使用我舍入的float,静态位图使用int。下面是一段代码,我想找出需要更改哪些内容才能将位图交叉路径视为冲突 canvas.drawBitmap(rock2, 70, 32, null); //this is where it checks to see if the moving bitmap

位图A有一个位置,它的X/Y位置是静态的,位图B是移动位图,它从屏幕底部移动到用户在屏幕上触摸的任何位置。当移动位图到达静态位图,但未被识别为冲突时,移动位图使用我舍入的float,静态位图使用int。下面是一段代码,我想找出需要更改哪些内容才能将位图交叉路径视为冲突

                  canvas.drawBitmap(rock2, 70, 32, null);
    //this is where it checks to see if the moving bitmaps y coordinate is matched to the Y coordinate of the static bitmap
   if(canvas.getHeight() - Math.round(animY*-1) == (canvas.getHeight() - (canvas.getHeight()-32))){

        Log.d("ALERT", "COLLIDE");

      }
    //the Y value is *-1 because the moving bitmap is starting from the bottom of the screen so this converts the value to positive value
我不知道我的计算结果是错了,还是我把这次碰撞的方向弄错了。下面是我的移动代码片段

               //UP Y ANIMATION
    if(animY*-1 < canvas.getHeight() && !bumpY){

        animY += speedY;

        //IF ROCK IS NOT AT EXTREME LEFT OR EXTREME RIGHT KEEP ON TRACK
        if(animX < (canvas.getWidth()/2) || animX*-1 < (canvas.getWidth()/2) && !bumpX){
            animX += speedX;
            //IF ROCK HITS EDGE LEFT/RIGHT RETURN TO SENDER (INDICATE BUMP)
            if(animX*-1 > (canvas.getWidth()/2) - rock.getWidth()/2 || animX > (canvas.getWidth()/2) - rock.getWidth()/2){
                bumpX = true;
                bumpY = true;
            }
        }

        //IF Y HITS TOP OF SCREEN
        if(animY*-1 > canvas.getHeight()){
            bumpY = true;
        }
    }

    //DOWN Y ANIMATION
    if(animY < 0 && bumpY){ 

        //REVERSE DIRECTION OF Y
         animY  -= speedY;

         //IF ROCK HITS TOP OR SIDE REVERSE X DIRECTION
         if(bumpX || bumpY)
                animX -= speedX;

         //IF AT STARTING POINT
         if(animY > 0){
                bumpY = false;
                bumpX = false;
            }
    }

             //in an ontouch method where the X and Y values are calculated
             case MotionEvent.ACTION_UP:
            finalX = event.getX() - (cross.getWidth() / 2);
            finalY = event.getY() - (cross.getHeight() / 2);
            moveToX = finalX - startX;
            moveToY = finalY - startY;
            speedX = moveToX / 50;
            speedY = moveToY / 50;
            break;
//UP Y动画
if(animY*-1(canvas.getWidth()/2)-rock.getWidth()/2 | | animX>(canvas.getWidth()/2)-rock.getWidth()/2){
bumpX=真;
颠簸=真实;
}
}
//如果Y点击屏幕顶部
if(animY*-1>canvas.getHeight()){
颠簸=真实;
}
}
//向下旋转动画
如果(animY<0&&bumpY){
//Y的反向
敏捷的;
//如果岩石撞击顶部或侧面,则反转X方向
if(bumpX | | bumpY)
animX-=speedX;
//如果在起点
如果(动画>0){
颠簸=错误;
bumpX=false;
}
}
//在计算X和Y值的ontouch方法中
case MotionEvent.ACTION\u UP:
finalX=event.getX()-(cross.getWidth()/2);
finalY=event.getY()-(cross.getHeight()/2);
moveToX=finalX-startX;
moveToY=最终-startY;
speedX=moveToX/50;
speedY=moveToY/50;
打破

任何提示都将不胜感激,谢谢。

如果这是一个愚蠢的回答,很抱歉,但您的支票应该是:

if(canvas.getHeight() - Math.round(animY*-1) >= (canvas.getHeight() - (canvas.getHeight()-32))){

相反?(将“==”更改为“>=”)否则您只检查岩石何时准确降落在(canvas.getheight-32),而不是检查岩石是否经过它

您是否已在Log.d消息中添加以显示岩石相对于时间的坐标?不能确定,但我认为你计算“if(canvas.getHeight()-Math.round(animY*-1)==(canvas.getHeight()-(canvas.getHeight()-32))”的方式有些不可靠。。。然后把它打印出来,看看每一步的结果是什么移动的位图没有按完美的顺序移动,我也记录了这个移动。根据从起始点开始单击的方式,碰撞被检测并记录在cat中,如果靠近起始点触摸,我用于计算的方法会起作用,但距离更远,它不会起作用。也许是一个取整问题?如果是这样的话,我需要一些方向lol。谢谢你的评论谢谢你的补充,这是一个要点,但我确实想检查一个移动的岩石击中静态的准确。X和Y都错读了这个问题。明白了。现在我也开始认为这是一个取整的问题。。。但是,岩石必须准确地降落在地面上吗?或者可能差+/-10分?因为要让石头准确地放在一个地方有点难。。。从用户的角度来看,它只需要触摸静态位图的另一条边或边框,因此范围将是总宽度或总高度或静态位图。是的,我认为舍入肯定会起到一定作用,所以我希望能对我当前的代码提出一些调整建议,以帮助我应对hehesorry我对Android有点生疏了。。。但坐标系又是什么样的呢?(0,0)在纵向屏幕的左下角吗?至于舍入,获取截断值的原因可能是速度设置为“speedY=moveToY/50”;而十进制“50.0”(0,0)位于左上角,移动对象的起点位于屏幕的中心和底部,静态位图位于顶部附近。嗯,运动计算是浮动值,这取决于你点击的起始点的距离,岩石移动得更快或更慢