gpt4 book ai didi

android - 检查 Canvas android中线条和圆圈的碰撞

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:10 25 4
gpt4 key购买 nike

我正在尝试检查线和圆之间的碰撞,如果圆碰到线,它会将 bool 值更改为 true,一旦它没有被触及,它就会将其改回 false。我正在使用 Canvas 和表面 View 。

这是我用于检查碰撞的代码,它不起作用并最终出错:

@Override
public void run() {
while(runnable)
{
if(!holder.getSurface().isValid()){
continue;
}
Canvas mCanvas = holder.lockCanvas();
update(mCanvas);
values = new Values(mCanvas);
createPaints();
drawBackground(mCanvas);
drawObjects(mCanvas);
holder.unlockCanvasAndPost(mCanvas);


}
}

现在在更新中处理碰撞:

private void update(Canvas c) {
ball.update(c, checkLinesCollision(values.level1, ball.getX(), ball.getY()));
//takes a canvas, and a boolean
}

boolean checkLinesCollision(float[] f,float x,float y){
int c = 0;
for(int i = 0; i < f.length; i+=4){
float x1 = f[i];
float y1 = f[i+1];
float x2 = f[i+2];
float y2 = f[i+3];

if (x> x1 && x<x2 && y>y1 && y>y2){

c++;

}
}
if(c>0){return true;}else{return false;}

}

水平的值(value)

 float yLow = c.getHeight()-c.getHeight()/4;

level1 = new float[]{0,yLow,c.getWidth(),yLow,
40,c.getHeight()/2,300,c.getHeight()/2};

球更新函数:

public void update(Canvas c, boolean b) {

if(b){

dy=-dy;
b = false;
}
y -= dy;
dy--;
}

现在根据 logcat,问题出在主更新函数中。
我认为我使用了错误的功能,我该如何解决?

谢谢!

最佳答案

我找到了解决方案。显然问题出在 float 组上;在我的应用程序中,我在构造函数中声明了 float 组。经过长时间的网上研究并重新检查我的 logcat,我发现你不能在构造函数中声明一个数组。我所做的只是将 float 组移到构造函数之外,一切正常,即使我找到了解决方案,但我不确定为什么不能在构造函数中声明它。

关于android - 检查 Canvas android中线条和圆圈的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11732816/

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