检测纹理碰撞
Detecting Texture Collision
我有如下图片:
我添加了黑色边框以显示纹理的宽度和高度,但它们实际上并不是我图像的一部分。
现在我使用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);
}
当其中两个对象发生碰撞时,我想 return 一个真布尔值。所以我像这样进行碰撞检查:
if(Intersector.overlaps(rectanlge1, rectangle2)){
System.out.println("intersect!");
return false;
}
我根据纹理区域的高度和宽度创建矩形。
这样做很好,但是,问题是纹理不只是矩形。例如,我应该能够遇到以下情况,因为“绿色和蓝色区域”不会发生碰撞。
这显然是我的代码中的冲突,但我不希望出现这种情况,因为绿色和蓝色区域实际上根本没有接触。
我如何使用 libgdx 和 scene2d 来实现?
尝试使用 2 个矩形来更恰当地描述您的图像,然后修补碰撞检测以使用它们。
碰撞检测可能看起来像这样:
if(Intersector.overlaps(rectanlge1A, rectangle2A)
|| Intersector.overlaps(rectanlge1A, rectangle2B)
|| Intersector.overlaps(rectanlge1B, rectangle2A)
|| Intersector.overlaps(rectanlge1B, rectangle2B) ){
System.out.println("intersect!");
return false;
}
我有如下图片:
我添加了黑色边框以显示纹理的宽度和高度,但它们实际上并不是我图像的一部分。
现在我使用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);
}
当其中两个对象发生碰撞时,我想 return 一个真布尔值。所以我像这样进行碰撞检查:
if(Intersector.overlaps(rectanlge1, rectangle2)){
System.out.println("intersect!");
return false;
}
我根据纹理区域的高度和宽度创建矩形。
这样做很好,但是,问题是纹理不只是矩形。例如,我应该能够遇到以下情况,因为“绿色和蓝色区域”不会发生碰撞。
这显然是我的代码中的冲突,但我不希望出现这种情况,因为绿色和蓝色区域实际上根本没有接触。 我如何使用 libgdx 和 scene2d 来实现?
尝试使用 2 个矩形来更恰当地描述您的图像,然后修补碰撞检测以使用它们。
碰撞检测可能看起来像这样:
if(Intersector.overlaps(rectanlge1A, rectangle2A)
|| Intersector.overlaps(rectanlge1A, rectangle2B)
|| Intersector.overlaps(rectanlge1B, rectangle2A)
|| Intersector.overlaps(rectanlge1B, rectangle2B) ){
System.out.println("intersect!");
return false;
}