我剛開始使用libgdx創建遊戲。這是一個使用scene2d UI的自上而下的2D射擊遊戲。現在我想,我可以在某些層次上添加黑暗和光明,但我不想用box2d重寫所有內容。我不需要逼真的陰影,只需要一些環境光線和一個光環圍繞我的角色,這不受圍牆周圍的牆壁和其他障礙的影響。所以我想知道libgdx中是否有任何類型的燈光系統?或者,我可以使用box2dlights而不使用box2d body/world ...?謝謝Libgdx light without box2d
回答
在我看來,標記的答案是錯誤的。
它實際上很簡單,使用box2dLights而不使用box2d,如果你不想要任何陰影。問題是,如果有可能在角色周圍添加某種圓形光線。
我使用了兩種不同的方法,只有一種使用box2dlights。
標記答案中的文章闡明瞭使用FBO的方法。如果你只是想要點亮一個區域,你真的不需要。你只需要一個精靈,比如this。現在把它放在烏爾屏幕上,並且渲染時,請執行下列操作:
batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
theLightSprite.draw(batch, parentAlpha);
batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
首先混合功能被改變,所以我們不只是渲染精靈,但在背景上的照明方式融入它。繪製完成後,將混合函數重新設置爲normal,這樣之後的其他所有內容都會再次正常渲染。而已。
第二種方法使用box2dlights。是的,我們確實需要box2d世界對象,但我們不需要對它做任何事情。所以我們做的是:
world = new World(new Vector2(0,0),false);
rayHandler = new RayHandler(world);
rayHandler.setCombinedMatrix(stage.getCamera().combined);
new PointLight(rayHandler,1000, Color.BLUE,radius,x_position,y_position);
首先我們創造了我們的世界,那就是無所作爲。我們只需要它來創建我們的RayHandler來計算我們的燈光。在第三個聲明中,我們設置了rayHandler的矩陣。在這種情況下,我使用scene2d,並因此使用階段相機組合矩陣。如果你使用其他相機,只需在這裏使用其組合矩陣。最後一個聲明用rayHandler創建了一個點光源,描述了光線的數量,燈光的顏色,半徑和位置。
現在我們所要做的,就是把我們的舞臺或精靈在我們的render()方法,並調用
rayHandler.updateAndRender();
後
的渲染方法。挺容易。
感謝您的回答,這是非常詳細和明確的! +1 – Springrbua
- 1. Libgdx Batch without ApplicationListener
- 2. LibGDX + Box2D旋轉
- 3. libgdx box2d drawarc
- 4. Libgdx box2D錯誤
- 5. LibGDX Touch Box2D Body
- 6. LibGDX/Box2D UnsatisfiedLinkError
- 7. LIBGDX Animate without enternig render()
- 8. LibGDX Draw Scrollpane WITHOUT Stage
- 9. LibGDX BOX2D變化maxPolygonVertices
- 10. LibGDX Box2d getWorldPoint問題
- 11. LibGDX Box2D不渲染
- 12. Libgdx/Java性能與崩潰光的Box2D
- 13. box2d和libgdx中的彈弓
- 14. Box2D的libgdx多邊形
- 15. Libgdx Box2D速度不夠快
- 16. Box2D Libgdx黑色屏幕
- 17. Box2D的libgdx上設備
- 18. 呈現關節? [libGDX/Box2D]
- 19. Java LibGDX Box2D燈光bug
- 20. Box2D的LibGDX繩問題
- 21. Box2D,libGDX斜坡碰撞
- 22. 彈射器臂旋轉 - libgdx和box2d
- 23. LibGdx RayCast box2d調試(可視屏幕)
- 24. Libgdx box2d ContactListener是非常糟糕的
- 25. 在libgdx和box2d中的相機
- 26. libgdx - box2d速度和力量不工作
- 27. Libgdx Box2D的60fps的,但口吃
- 28. Box2d和LibGDX sprite與燈具不同步
- 29. LibGdx Box2d collison與精靈不匹配
- 30. 在libgdx創建多個實例的Box2D
感謝這個真正快速的答案。我會盡快完成這篇文章。謝謝! – Springrbua
我想我明白它的基本工作原理。在libgdx中,我可以使用我的舞臺的繪製方法,並使用深藍色透明(Alpha = 0.7f或類似的東西)顏色來添加環境光?但是我怎麼才能給角色增加明亮的光線呢?謝謝 – Springrbua
首先你以正常的方式呈現你的場景。然後,您創建一個屏幕大小的FBO,但您將(背景)顏色設置爲例如(0.7,0.7,0.7,1.0)(環境閃電)。之後,您可以在FBO上繪製所有燈光,就像在正常場景中繪製某些東西一樣。它們將成爲黑色背景上的白色斑點。完成後,您將在正常場景的頂部啓用混合渲染該FBO。由於fbo的黑暗環境顏色,所有沒有光線的地方會變暗。所有其他人會變得更加明亮(燈光)。 – noone