Java 二维碰撞速成班

Java 二维碰撞速成班,java,android,collision-detection,Java,Android,Collision Detection,有人能给我一个关于Android二维碰撞检测的网站、博客、文章的参考资料,或者给自己发一个速成班或简易帮助指南吗?我看了在线教程中的冲突代码,但他们没有解释代码中的冲突部分——只是实现精灵的部分。我不是在用OpenGL,我是在用画布做游戏。我已经搜索过了,但我一直在寻找OpenGL或C++的东西,但是我使用java。如有解释,将不胜感激。谢谢你能提供的任何帮助 在Java中,您可以查看 本网站为您提供了一些性能比较: (如果您选择了一个引擎,那么只需转到“引擎教程”即可找到所需的所有源代码

有人能给我一个关于Android二维碰撞检测的网站、博客、文章的参考资料,或者给自己发一个速成班或简易帮助指南吗?我看了在线教程中的冲突代码,但他们没有解释代码中的冲突部分——只是实现精灵的部分。我不是在用OpenGL,我是在用画布做游戏。我已经搜索过了,但我一直在寻找OpenGL或C++的东西,但是我使用java。如有解释,将不胜感激。谢谢你能提供的任何帮助

在Java中,您可以查看

本网站为您提供了一些性能比较:

(如果您选择了一个引擎,那么只需转到“引擎教程”即可找到所需的所有源代码

否则你可以自己写(取决于你想要的物理有多复杂)


但我要指出的是,使用画布绘制实时物理非常慢,我开始这样做是因为我在测试引擎,但你永远不会得到一个好的帧速率


所以,除非你仅仅因为一个很小的原因需要物理,否则我建议你切换到Java中的opengl,你可以看看

本网站为您提供了一些性能比较:

(如果您选择了一个引擎,那么只需转到“引擎教程”即可找到所需的所有源代码

否则你可以自己写(取决于你想要的物理有多复杂)


但我要指出的是,使用画布绘制实时物理非常慢,我开始这样做是因为我在测试引擎,但你永远不会得到一个好的帧速率


因此,除非你仅仅因为一个很小的原因而需要物理,否则我建议你切换到opengl,碰撞矩形是最容易的(实际上是圆,但你不使用精灵)

对于两个要碰撞/重叠的矩形,需要共享一些空间

public class Sprite{
    private int left,right;//bounding box left<right and top>bottom
    private int top,bottom;

    public final boolean collidesWith(Sprite other){
        if(this.left>other.right || other.left>other.right)return false;
        if(this.bottom>other.top || other.bottom>other.top)return false;

        return true;
    }
}
公共类精灵{
private int left,right;//边界框leftbottom
私人int顶部、底部;
公共最终布尔碰撞开关(精灵其他){
如果(this.left>other.right | | other.left>other.right)返回false;
如果(this.bottom>other.top | | other.bottom>other.top)返回false;
返回true;
}
}

要获得哪些矩形发生碰撞,您可以扫过整个电路板,并检查一维中的所有重叠

碰撞矩形是最简单的(实际上是圆,但您不使用精灵)

对于两个要碰撞/重叠的矩形,需要共享一些空间

public class Sprite{
    private int left,right;//bounding box left<right and top>bottom
    private int top,bottom;

    public final boolean collidesWith(Sprite other){
        if(this.left>other.right || other.left>other.right)return false;
        if(this.bottom>other.top || other.bottom>other.top)return false;

        return true;
    }
}
公共类精灵{
private int left,right;//边界框leftbottom
私人int顶部、底部;
公共最终布尔碰撞开关(精灵其他){
如果(this.left>other.right | | other.left>other.right)返回false;
如果(this.bottom>other.top | | other.bottom>other.top)返回false;
返回true;
}
}


为了得到哪一个碰撞,你可以扫过整个电路板,检查一维中的所有重叠部分

我确信这个双关语是有意的。二维还是三维碰撞?不确定这是否会产生巨大的差异;只是问问是否会产生巨大的差异。你可以看看另一个(如本页右侧所示)。谢谢,我从来没有真正注意过这一方面。@Cephron 3D碰撞引擎更复杂,需要2个正方形来比较8个点,2个立方体来比较16个点,我研究了这些算法,相信我,添加额外的维度会测试^2 LOL我确定双关语是有意的。二维还是三维碰撞?不确定这会有很大的不同,只是问一下以防万一。你可以看看另一个(如本页右侧所示)。谢谢,我从来没有真正注意过这一方面。@Cephron 3D碰撞引擎更复杂,需要2个正方形来比较8个点,2个立方体来比较16个点,我研究了这些算法,相信我,添加额外的维度确实会测试^2。谢谢,我不确定我会。这是一款类似射击的游戏如果子弹击中目标,目标就会被摧毁。当他被摧毁时,没有什么特别的事情发生。这不是什么特别的事情发生的问题,画布的绘制速度太慢,无法进行实时物理处理,你必须认为画布经过优化,可以偶尔绘制一些东西。你必须认为你的应用程序必须处理触摸event+计算物理+绘制场景,如果你继续使用Canvas,你的应用程序很可能不会有平滑的动画。我只是给你一些提示,因为我也这么做了。如果你有运行Canvas的东西,并且它是minimalisitc,那么可能(我重读了你的描述,我认为你不需要物理引擎来完成你的工作,因此你最好编写自己的碰撞算法并使用Canvas)谢谢,我不确定我是否这样做。这是一个类似射击的游戏,子弹击中目标,目标被摧毁。当他被摧毁时,没有什么特别的事情发生。这不是什么特别的事情发生的问题,画布的绘制太慢了,无法进行实时物理,你必须认为画布经过优化,可以一次绘制一次虽然如此,但你必须认为你的应用程序必须处理触摸事件+计算物理+绘制场景,如果你继续使用Canvas,你的应用程序很可能不会有平滑的动画。我只是提醒你一下,因为我也这么做了。如果你用Canvas运行了一些东西,并且它是minimalisitc,那么也许(我重读了你的描述,我认为你不需要物理引擎来完成你的工作,因此你最好编写自己的碰撞算法并使用Canvas)非常感谢这个例子。this语句是other还是sprite类,而other是一个对象。我在参数中引用了other,以防它听起来混淆。@manji this和
other
都是
sprite
类型的对象(我将其作为存根类b放入)