Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie erstelle ich einen Lichtkristall???
necromant
26.08.2013, 21:28
Hallo.
Ich bin grad dabei, ein Spiel mit RPG Maker XP zu programmieren. Leider wess ich nicht, wie ich einen Lichtkristall wie bei Thief erstellen kann.
Könnt ihr mir bitte helfen???
ich hab Thief nicht gespielt, daher wäre es für mich (und andere) sicherlich hilfreich die genaue gewünschte Funktionsweise des Lichtkristalls anzusagen. Also, was soll es können, soll es als Item im Inventar oder Objekt auf der Map sein etc.
Je genauer du das Objekt beschreibst (Mit all seinen Funktionen), was du im endeffekt im Spiel haben möchtest, desto genauer können wir dir auch helfen.
necromant
26.08.2013, 21:49
http://www.nonuba.com.br/images/stories/thief5.jpg
Dieser leuchtende Kristall ist ein solcher Lichtkristall. Je sichtbarer man für einen Gegner ist/je näher man an einer Lichtquelle steht, umso heller leuchtet er.
Wie gut bewandert bist du mit dem RPG Maker? Egal, also eine Möglichkeit:
Du fragst den Abstand von dem helden und jedem gegner ab (am besten über nen Parallel-Process-Event auf der Map).
Dies machst du am besten über Variablen. Mal im Pseudocode:
(x.gegner# = die Map - X - Koordinate des Gegners Nummer #. Ich hoffe das Hilft zum Verständnis)
Variable[1] = x.gegner1
Variable[2] = y.gegner1
Variable[1] -= x.Spieler
Variable[2] -= y.Spieler
if variable[1] < 0 ___________ //Die X-Entfernung positiv machen, sollte sie negativ sein. Entfernungen sind immer positiv zu handhaben.
_variable[1] *= -1
end
if variable[2] < 0 ___________ //Die Y-Entfernung positiv machen, sollte sie negativ sein. Entfernungen sind immer positiv zu handhaben.
_variable[2] *= -1
end
variable[3] = variable[1] ______//Variable 3 ist die gesamtentfernung, die errechnet wurde
variable[3] += variable[2]
variable[4] = variable[3] ______ //Variable 4 ist die kleinste Entfernung alle gegner betrachtet
//Der Part jetzt für jeden Gegner in deinem Spiel
Variable[1] = x.gegner2
Variable[2] = y.gegner2
Variable[1] -= x.Spieler
Variable[2] -= y.Spieler
if variable[1] < 0 ____________ //Die X-Entfernung positiv machen, sollte sie negativ sein. Entfernungen sind immer positiv zu handhaben.
_variable[1] *= -1
end
if variable[2] < 0 _____________ //Die Y-Entfernung positiv machen, sollte sie negativ sein. Entfernungen sind immer positiv zu handhaben.
_variable[2] *= -1
end
variable[3] = variable[1] _______//Variable 3 ist die gesamtentfernung, die errechnet wurde
variable[3] += variable[2]
if variable[3] < variable[4]______//ist diese Entfernung kleiner, wird die Variable 4 durch die jetztige Variable 3 ersetzt, da 4 ja die kleinste Entfernung ist
_variable[4] = variable[3]
end
// ENDE
So, jetzt haste die Entfernung in Kästchen. Jetzt musste nurnoch über'n paralleles Common-Event ein Picture anzeigen, dass sich je nach Nähe der Gegner ändert.
Hilfts?
necromant
26.08.2013, 22:31
Ich seh da irgendwie nicht durch. Kannst du mir bitte eventuell nen Screenshot machen?
http://s14.directupload.net/images/130826/ws6j5wgg.png
So siehts aus. Hier ein Beispiel für 3 Gegner.
Das mit dem Picture bekommste ja selber hin, oder? Wenn nicht, dann schick ich dir davon au maln Screenshot =P
Der Wait am Ende ist optional. Ich hab die erfahrung gemacht, dass selbst nen 1 Frame wait am ende von parallelen Prozessen das spiel ein wenig laggfreier macht.
necromant
26.08.2013, 23:45
Wäre nett. Bei solchen Sachen hab ich kleinere Probleme.
http://s1.directupload.net/images/130827/vb585j6t.png
Here you go. Das ganze funktioniert aber nur, wenn du die gegner auf der Map laufen lässt und du keine Zufallskämpfe oder sonstige Scripts benutzt und Grafiken musste selber erstellen.
Nicht vergessen das Bild zu löschen sollte der Switch ausgeschaltet werden. Die Entfernungen musste au selber eingeben. Momemtan isses so aufgebaut:
http://s14.directupload.net/images/130827/3g3x6h5o.png
Schwarzer Punkt: der Held
Rotes Feld: gegner ist nah
Grünes Feld: gegner ist mittelmäßig weit entfernt
Weißes feld: Gegner ist noch weit weg
Blaues feld: gegner ist seehr weit weg
Ein kasten im raster ist ein Kästchen im Spiel
Also zeigt der Stein momentan ein sehr weites Feld an. Du möchtest das bestimmt in irgendeiner Form ändern.
(Die Grafik veranschaulicht nur die Reichweite.)
Lares Yamoir
27.08.2013, 00:22
@Kwabi: Du kannst das nicht wissen, da du Thief nicht gespielt hast, aber der Kristall ist nicht vom Gegner abhängig sondern von der Dunkelheit der Region.
@necromant: Für das grundlegende anzeigen des lichtkristalls verwendest du am besten Terrain Tags (die findest du bei den tilesets). Bedenke aber, dass dir das nur erlauben würde statischen Schatten zu imitieren. Auf jedenfall fragst du dann legiglich ab, welches Terain Tag das Tile hat, auf das der Spieler steht und veränderst dem entsprechend das angezeigte Bild.
Damit die Gegner darauf dann reagieren können must du nun lediglich beim gegner abfragen, ob der Spieler sichtbar ist (also auch entweder wieder der Terain Tag des Spielers oder uber ne extra Variable). Danach kannst du noch weitere Verfeinerungen durchnehmen. Zum Beispiel, dass der Gegner nur auf den Spieler reagiert, wenn er in seine Richtung guckt und einen bestimmten Abstand vom Spieler hat (da kann dir auch das Skript von Kwabi aushelfen).
Ohh... Sorry dann, dann wird dir mein Zeug nicht helfen.
Wenn du das ganze noch mit sichtbarkeit veränderbar durch Schatten machen möchtest, brauchste noch ne komplette KI für deine Gegner und gute Lightmaps. Wenn du selber sagst, dass du Probleme mit Scripting/Eventing hast, dann solltest du dir vielleicht ein einfacheres Spielprinzip suchen, nach dem du dein Spiel erstellst. Sowas ist ziemlich ziemlich kompliziert (außer jemand kann dir grade ein komplettes Script für das alles anbieten).
Ich kann dir gerne bei der ganzen Sache helfen, aber ich hab nen ziemlich eigenen Programmierstil, der ziemlich unnötig kompliziert wird und bei dem vermutlich keiner durchsieht; nichtmal ich selbst nach nem Monat. (Es wär dann auch nicht gescripted, sondern über events gelöst :3)
necromant
27.08.2013, 01:28
Danke. Ihr habt mir beide sehr geholfen. :)
@Lares:
Kannst du das eventuell anhand von Screenshots erklären?
Lares Yamoir
27.08.2013, 02:31
Ich hab den XP nicht mehr, benutze den VXAce. Macht zwar keinen Unterschied von der Theorie her, aber da das Menü etc. anders aufgebaut ist, werden dir Screenshots nicht viel bringen.
Ich schätze mal du bist noch relativ neu beim RPG Maker oder? Wahrscheinlich wäre es besser erstmal nen Anfängertutorial durchzuarbeiten, dass dir die ganzen Grundlagen erklärt.
Wichtige Stichpunkte hierbei wären Database, Common Events, Terrain Tag, Switches und Variablen.
Najut ich versuch das mal textlich zu erklären:
In der Database gibt es den Unterpunkt "Tileset". Dort kannst du verschiedene Tilesets einstellen. Dort gibt es auch die Option "Terrain Tag". Für jedes Tile eines Tilesets kannst du nun eine Zahl zuweisen. Je nachdem wie weit das Tile im Schatten liegen soll, benutzt du eine andere Zahl für das Tile.
Nun erstellst du dir ein Common Event (ebenfalls ein Unterpunkt der Database). Das Event stellst du auf Parallel Process (es ist dann abhängig von einem Switch). Du musst den Switch also irgendwann im Spiel über ein Mapevent aktivieren, damit das funktioniert.
Nun zum Inhalt des Common Events:
Als erstes holst du dir den Terrain Tag für das Tile, auf das der Spieler steht. Dazu benutzt du den Befehl "Control Variables" und wählst den Punkt "Character->Player->Terrain Tag" aus.
Danach fragst du den Wert der Variable über einen "Conditional Branch" ab (Du wirst mehrere Conditional Branches brauchen für mehrere Werte). Innerhalb des "Conditional Branch" rufst du nun "Show Picture" auf und stellst das entsprechende Bild auf, welches für den entsprechenden Wert angezeigt werden soll.
Beispiel:
Terrain Tags
0 = komplett unsichtbar
1 = komplett sichtbar
Pseudo-Code für Common Event
if Variable == 0 -> zeige dunklen Kristall an
sonst
if Variable == 1 -> zeige hellen Kristall an
Das Prinzip übernimmst du für alle weiteren Abstufungen.
Damit hast du zumindest schonmal deinen Lichtkristall im Spiel. Wenn du nun irgendwann ne Cutscene oder ähnliches einbauen willst musst du 1. den Switch deaktivieren der das Common Event aktiviert und 2. das Bild wieder löschen über den entsprechenden Event-Befehl.
Das ganze lässt sich noch weiter optimieren und natürlich fehlt noch die Reaktion der AI. Wenn du aber die Grundlagen des Makers verstanden hast, kannst du dir diese Sachen selber überlegen. Es bringt dir schließlich nichts, wenn ich dir total komplizierten Event-Code vorgebe, der am Ende doch nicht genau das macht, was du möchtest (Zumal ich, wie gesagt, eh nicht testen kann, ob das alles bei dir funktioniert, weil ich nen anderen Maker benutze).
Hoffe die Erklärung hilft dir weiter.
necromant
27.08.2013, 11:07
Danke. Das ist zumindest eine Starthilfe für mich.
Mit dem Maker selbst arbeite ich schon seit längerem.
Ich habe bloss bei solchen Sachen meine Probleme.
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.