Entwickler-Ecke
Multimedia / Grafik - [Andorra 2D] Licht
knittel - Di 13.09.11 17:19
Titel: [Andorra 2D] Licht
Hallo allerseits,
Ich will die Andorra Engine benutzen um ein 2D-Rollenspiel zu entwickeln. Das ganze soll ziemlich dunkel ausfallen.
Ich wollte es so machen, dass grundsätzlich erstmal alles dunkel ist und nur ein Lichtstrahl von der Taschenlampe des Spielers ausgeht und Umgebung beleuchtet.
Meine Grundidee war es erstmal alles zu zeichen und dann einen schwarzen Kasten drüber male, welchen ich dann, da wo das Licht ist durchsichtig mache. Das Problem ist ich, weis zwar wie ich berechnen könnte, wie hell es an einem Punkt seien soll. Das eigentliche Problem ist, ich weis nicht wie ich aus dem schwarzen Kasten wieder die Farbe "subtrahiere".
Ich wäre erfreut, wenn jemand eine Lösung kennt.
Danke im voraus.
Horschdware - Di 13.09.11 20:00
Hi,
auf Anhieb wüsste ich jetzt nicht, wie man den Lichtkegel darstellt, aber die Andorra Engine kommt mit Licht gut klar.
Zu erst müsstest du in deiner Render Routine die Beleuchtung einschalten und ein dunkeles Licht definieren. Die Elemente, die gezeichnet werden sollen, müssen in ihrer Zeichenroutine dann die Beleuchtung wieder ausschalten oder ein helles Licht hinzufügen. Ich müsste mir das im Detail aber selbst mal anschauen,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Render; begin
AdDraw.BeginScene;
AdDraw.Options := AdDraw.Options + [aoLight]; AdDraw.Scene.AmbientColor := Ad_ARGB(255, 50, 50, 50);
AdDraw.Options := AdDraw.Options - [aoLight]; AdDraw.EndScene;
end; |
Vielleicht hilft dir das ja als Ansatz weiter. Wenn ich eine neue Idee dazu habe, gebe ich dir Bescheid.
edit:
Mir ist gerade eine Idee für eine unsaubere Lösung gekommen :-D
Wenn du deinen Lichtkegel als Grafik vordefinierst, dann kannst du eine Klasse von TImageSpriteEx ableiten.
Dort nutzt du dann die Methode SetAngle(val : double) um den Kegel zu drehen.
Die DoDraw Methode überschreibst du mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TLichtkegel.DoDraw; begin AdDraw.Options := AdDraw.Options - [aoLight]; inherited DoDraw; AdDraw.Options := AdDraw.Options + [aoLight]; end; |
Sprich: Vor dem Zeichnen Licht aus, danach wieder ein.
Jetzt könnte man die Kollisionsabfrage nutzen, um andere Sprites, die sich innerhalb des Kegels befinden auch sichtabr zu machen.
Niko S. - Di 13.09.11 20:16
Andorra hat tolle Beispiele mit Sourcecode.
Auch mit Licht und Shading. Musst du dir nur mal anschauen. Oder Maskieren.
Eines von beiden lässt sich für deine Zwecke gut verwenden ;)
knittel - Do 15.09.11 15:49
Vielen Dank. Ihr habt mir alle sehr weitergeholfen. :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!