[英]Detect collision between ShapeRenderer line and sprite in LibGdx
[英]How to handle collision with ShapeRenderer in LibGDX
我正在嘗試使用LibGDX為Android制作一款小游戲,並且在碰撞檢測方面遇到了困難。 所以,我有兩種形狀:第一種是矩形(播放器):
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(position.x, position.y, width, height);
shapeRenderer.end();
第二個是下面的籠子:
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.rect(0, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, 0, Gdx.graphics.getWidth(), 50);
shapeRenderer.rect(Gdx.graphics.getWidth()-50, 0, 50, Gdx.graphics.getHeight());
shapeRenderer.rect(0, Gdx.graphics.getHeight()-50, Gdx.graphics.getWidth(), 50);
shapeRenderer.end();
我的問題是:
如何檢測這兩個對象之間的碰撞? 我知道的唯一方法是使用Rectangle類中的intersect方法檢測碰撞,但是我想制作比矩形更復雜的形狀。
謝謝您的幫助 !
根據文檔, ShapeRenderer
效率不高,不應大量使用。
渲染點,線,矩形,填充的矩形和框。 此類並非旨在用於對性能敏感的應用程序,而是更面向調試。
更好的方法可能是分配具有較小白色紋理的Sprite
,然后將其提升到適當的大小。 使用setColor(..)方法設置色調和alpha。
對於Sprite的getBoundingRectangle()
碰撞,返回邊界軸對齊的Rectangle,這將幫助您進行碰撞。
您可以使用pixmap手動創建紋理。
public static Texture createBgTexture() {
Pixmap pixmap = new Pixmap(1, 1, Format.RGBA8888);
pixmap.setColor(Color.WHITE);
pixmap.fill();
Texture texture = new Texture(pixmap); // must be manually disposed
pixmap.dispose();
return texture;
}
對於更復雜的形狀,請使用Physics Body Editor ,它將以可讀文件格式返回形狀的頂點,使用該點並創建Polygon 。
Libgdx具有Intersector
類,包含許多用於碰撞檢測的靜態方法,如intersectPolygons(....)
等。
另一方面,如果要進行逼真的碰撞檢測,則可以在游戲中使用box2d。 在box2d API中,有一個ContactListener
接口,該接口將告訴您兩個物體何時碰撞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.