簡體   English   中英

如何在LibGDX中使用ShapeRenderer處理碰撞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM