Ich habe gerade angefangen, ein Spiel mit libgdx zu erstellen. Es ist ein Top-down-2D-Shooter mit scene2d ui. Nun dachte ich, dass ich einige Ebenen mit Dunkelheit und Licht ausstatten könnte, aber ich möchte nicht alles mit box2d neu schreiben. Ich brauche keine realistischen Schatten, nur irgendeine Art von Umgebungslicht und einen Lichtkreis um meinen Charakter herum, der nicht von Wänden und anderen Hindernissen umgeben ist. Also wollte ich wissen, ob es in libgdx irgendein Lichtsystem gibt? Oder kann ich box2dlights verwenden ohne box2d bodies/world ...? DankeLibgdx Licht ohne box2d
Antwort
Leider gibt es nichts dergleichen von LibGDX.
Aber Sie können es leicht selbst tun, wenn Sie keine Schatten wollen.
Here ist ein kleines Video von jemandem, der es über LibGDX getan hat. Here ist der Artikel zu diesem Video, mit Code und Beschreibungen und alles zur Verfügung gestellt. Sie können dies mit Shadern machen, aber Sie können dasselbe auch tun, indem Sie einfach eine Lightmap zu einem FBO rendern (in den gegebenen Links sehen Sie, wie das geht) und dann machen Sie es einfach so wie es bei der Mischung aktiviert ist oben auf dem Bildschirm. Der Standard SpriteBatch
kann dies tun und Sie benötigen keine benutzerdefinierten Shader.
Wenn Sie immer noch echte Schatten mit Hindernissen haben wollen, werden Sie wahrscheinlich this Artikel sehr nützlich finden. Aber das ist viel langsamer und benötigt spezielle Shader.
Es gibt auch keine Möglichkeit, Box2dLights ohne Box2D btw zu verwenden.
Meiner Meinung nach ist die markierte Antwort falsch.
Es ist eigentlich ziemlich einfach zu box2dLights ohne box2d verwenden, wenn Sie keine Schatten wollen. Die Frage war, ob es möglich ist, eine Art Kreislicht um ein Zeichen herum hinzuzufügen.
Ich habe zwei verschiedene Ansätze verwendet, nur einen mit box2dlights.
Der Artikel in der markierten Antwort beschreibt eine Methode, die FBO verwendet. Das brauchst du nicht wirklich, wenn du nur einen Bereich aufhellen willst. U brauchen nur ein Sprite, wie this. legen Sie sie jetzt irgendwo auf ur-Bildschirm, und beim Rendern, wie folgt vorgehen:
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);
Zunächst wird die Vermischungsfunktion geändert wird, so wir nicht nur das Sprite machen, aber mischen Sie sie in einer Beleuchtungs Art und Weise auf dem Hintergrund. Stellen Sie nach dem Zeichnen die Blend-Funktion auf normal zurück, damit alles andere danach wieder normal wiedergegeben wird. Das ist es.
Der zweite Ansatz verwendet box2dlights. Ja, wir brauchen ein box2d Weltobjekt, aber wir müssen nichts damit anfangen. Also was wir tun ist:
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);
Zuerst erstellen wir unsere Welt, das tut nur nichts. Wir brauchen es nur für die zweite Aussage, wo wir unseren RayHandler erstellen, der unsere Lichter berechnet. In der dritten Anweisung setzen wir die Matrix des rayHandler. In diesem Fall benutze ich scene2d und benutze dafür die Stages camera combined matrix. Wenn Sie eine andere Kamera verwenden, verwenden Sie einfach die kombinierte Matrix. Die letzte Anweisung erstellt ein Pointlight mit dem rayHandler und beschreibt die Anzahl der Strahlen, die Lichtfarbe, ihren Radius und ihre Position.
Alles, was wir jetzt tun müssen, ist unsere Bühne oder Sprites in unserem machen zeichnen() -Methode und rufen
rayHandler.updateAndRender();
danach in dem Verfahren machen. Ziemlich einfach.
Danke für Ihre Antwort, es ist sehr detailliert und klar! +1 – Springrbua
- 1. Box2D Libgdx Rope Ausgabe
- 2. LibGDX BOX2D ändern maxPolygonVertices
- 3. libgdx box2d Reibungsverbindung funktioniert nicht
- 4. Komplexe Formen in Box2D mit LibGDX
- 5. box2d (libgdx) gestapelte Körper nicht stabil
- 6. Libgdx orthographisch Kameraansicht Größe (mit Box2D)
- 7. Box2d: mousejoint ohne Trägheitsverzögerung
- 8. Beispiel für Regisseur, Bühne, Gruppe, Schauspieler, Box2D und GestureDector LibGdx
- 9. Libgdx - Entfernen der Kreisentwurf gemacht auf Box2D CircleShape
- 10. Libgdx Box2D Einrichten eines Bildes zu einem Körper
- 11. Kollision in Libgdx box2D fehlgeschlagen für einige Körper
- 12. Wie benutze ich LibGDX Kameras mit Box2D Debug Renderer
- 13. LibGdx box2d Wie kann ich die Körpergröße ändern, ohne das Gewicht zu verändern?
- 14. Wie rotiert Box2d Körper?
- 15. Box2D Lichter machen zwischen scene2d Schauspieler
- 16. Libgdx/java Ausdruck: m_type == b2_dynamicBody
- 17. box2d Kollisionsgruppen
- 18. Box2D Geschwindigkeitskappe?
- 19. Box2d: Maximal mögliche Lineargeschwindigkeit?
- 20. Wann sollten ShapeRenderer, Mesh + SpriteBatch, Box2D und Scene2D in Libgdx verwendet werden?
- 21. Wie stoppen Sie die Impulse und Kräfte eines Körpers, aber nicht die Schwerkraft in libGDX (Box2D)?
- 22. LibGDX Box2d Android Absturz "Fatal Signal 11 (SIGSEGV), Code 1, Fehler addr ..."
- 23. LibGDX In-App-Käufe und Gradle
- 24. Box2D/UserData/Cocos2D: Subclassing CCSprite schlägt für Box2D fehl?
- 25. Libgdx Fehler beim Importieren von Chartboost. sdk
- 26. Licht blutet durch Objekte
- 27. definiert Licht Koordinaten
- 28. Info Licht Taste Problem
- 29. pygtk + licht + Lokalisierung
- 30. Laden Licht von Konfiguration
Danke für diese wirklich schnelle Antwort. Ich werde diesen Artikel so schnell wie möglich durchgehen. Vielen Dank! – Springrbua
Ich denke, ich habe verstanden, wie es im Grunde funktioniert. In libgdx könnte ich die Zeichenmethode meiner Bühne verwenden und alles mit einer dunkelblauen, transparenten (Alpha = 0.7f oder so ähnlich) Farbe überschreiben, um Umgebungslicht hinzuzufügen? Aber wie kann ich dann dem Charakter das helle Licht hinzufügen? Danke – Springrbua
Zuerst renderst du deine Szene auf die normale Art und Weise. Dann erstellen Sie einen FBO in der Größe Ihres Bildschirms, aber Sie setzen Ihre (Hintergrund-) Farbe z. B. auf (0,7, 0,7, 0,7, 1,0) (Umgebungsbeleuchtung). Danach zeichnest du alle deine Lichter auf diesem FBO, genau wie du etwas in deiner normalen Szene zeichnen würdest. Sie werden weiße Flecken auf einem dunkleren Hintergrund sein. Wenn Sie damit fertig sind, werden Sie den FBO mit Blending über Ihrer normalen Szene rendern. Alle Orte ohne Licht werden aufgrund der dunklen Umgebungsfarbe der FBO dunkler. Alle anderen werden heller (Lichter). – noone