【问题标题】:Detecting Texture Collision检测纹理碰撞
【发布时间】:2023-03-17 14:13:02
【问题描述】:

我有如下图片:

我添加了黑色边框以显示纹理的宽度和高度,但它们实际上并不是我图像的一部分。

现在我使用 Texture Packer 来存储纹理。 在我的代码中,我找到了我想要的纹理区域:

TextureRegion enemyRegion = enemyAtlas.findRegion("Enemy");

在我的演员中使用 scene2d 我有以下绘制方法:

@Override
public void draw(Batch batch, float alpha){
    batch.draw(textureRegion.getTexture(),this.getX(),getY(),this.getOriginX(),this.getOriginY(),this.getWidth(),
            this.getHeight(),this.getScaleX(), this.getScaleY(),this.getRotation(),0,0,
            textureRegion.getRegionWidth(),textureRegion.getRegionHeight(),false,false);
}

当其中两个对象发生碰撞时,我想返回一个真正的布尔值。所以我像这样进行碰撞检查:

if(Intersector.overlaps(rectanlge1, rectangle2)){
        System.out.println("intersect!");
        return false;
}

我根据纹理区域的高度和宽度创建矩形。

这样做可以正常工作,但是问题在于纹理实际上不仅仅是矩形。例如,我应该能够遇到以下情况,因为“绿色和蓝色区域”不会发生碰撞。

这显然是我的代码中的冲突,但我不希望它发生,因为绿色和蓝色区域实际上根本没有接触。 如何使用 libgdx 和 scene2d 实现这一点?

【问题讨论】:

  • 很确定你必须为绿色和蓝色使用不同的精灵。我确实记得读过关于在 LibGdx 中设置像素完美碰撞的内容,尝试研究一下。

标签: android libgdx scene2d


【解决方案1】:

尝试使用 2 个矩形更恰当地描述您的图像,然后修补碰撞检测以使用它们。

碰撞检测可能如下所示:

if(Intersector.overlaps(rectanlge1A, rectangle2A) 
    || Intersector.overlaps(rectanlge1A, rectangle2B)
    || Intersector.overlaps(rectanlge1B, rectangle2A)
    || Intersector.overlaps(rectanlge1B, rectangle2B) ){
        System.out.println("intersect!");
        return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多