2016-12-26 40 views
0

我在學習libgdx和其中一件讓我真正困惑它的光線投射的東西。我閱讀了一篇關於如何使用它的教程,並且我理解它,但我真的很想知道背後是什麼。我搜索了這個方法的源代碼。有人能解釋我rayCast的工作原理嗎?

public void rayCast (final RayCastCallback callback, float point1X, float point1Y, float point2X, float point2Y) { // FIXME pool RayCastCallback? 
    world.raycast(new org.jbox2d.callbacks.RayCastCallback() { 
    @Override 
    public float reportFixture (org.jbox2d.dynamics.Fixture f, Vec2 p, Vec2 n, float fraction) { 
     return callback.reportRayFixture(fixtures.get(f), point.set(p.x, p.y), normal.set(n.x, n.y), fraction); 
    } 
}, this.point1.set(point1X, point1Y), this.point2.set(point2X, point2Y)); 

} 如何,我們可以看到這個方法遞歸調用自己,並返回到回調變量reportRayFixture通話。這讓我很困惑,它是從代碼選擇Fixture的地方,以及它如何檢查每個燈具。有人能真正解釋我的工作嗎?

這其源代碼頁https://github.com/libgdx/libgdx/blob/master/extensions/gdx-box2d/gdx-box2d-gwt/src/com/badlogic/gdx/physics/box2d/gwt/emu/com/badlogic/gdx/physics/box2d/World.java

,我將不勝感激!

+0

您正在查看錯誤的代碼(除非您使用的是gwt)。你所指的代碼是gwt後端,這是一個使用jbox2d的特例。所有其他後端只使用普通(本機)box2d庫。 – Xoppa

回答

0

Raycasting是當我們通過空間畫一條看不見的線並看看它與什麼相交。一個常用的方法是找出玩家點擊的是什麼 - 我們沿着玩家點擊的方向從相機中劃出一條線,我們線觸及的第一個對象是玩家點擊的線。

在Box2D中,RayCastCallback接口用於允許您編寫在射線遇到Fixture時執行的代碼(例如,您可能需要忽略某些固定裝置)。我沒有親自用過這個,但我想你可以在射擊遊戲中使用類似的東西來看看穿牆的武器是否可以擊中牆後的物體(或類似的東西)。

在較高的水平,這是什麼可愛一段代碼做的是一點點輕微的手工的,如果你看它真的很密切,它在做什麼走在libGDX RayCastCallback,並在其包裝JBox2D RayCastCallback具有略微不同的API。它更像是重載方法而不是遞歸地調用它。

什麼我不要知道是爲什麼作者選擇創建Point1和Point2實例變量。我想如果你有多個裝置,他們會被覆蓋,所以也許他們應該包含射線最後一個裝置。即使如此,它看起來像多個raycasts會覆蓋它們。

相關問題