PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RM2k3 Custom-SKS ATB-Leiste - mit Pictures gut machbar, oder doch lieber Events?



Motris
20.02.2012, 11:47
Hallo Leute,

mein Projekt liegt seit zwei Monaten mehr oder weniger auf Eis, weil ich keine zufriedenstellende Lösung für mein Problem finde.

Folgendes:
Ich wollte für mein Projekt ein eigenes rundenbasiertes SKS erstellen, hab auch schon den Kampfverlauf und alles aufgeschrieben, damit ich es Stück für Stück aufbauen kann.
Also an sich kein Problem, aber ich weiß einfach nicht wie ich eine gut funktionierende Leiste machen kann, ähnlich wie bei Velsarbor oder EpicFailSaga.
Symbole von Gegnern und Helden wandern auf einer Leiste, und wer, abhängig von Agilität, zuerst "am Ziel" ist, ist am Zug.
Ich find die Lösung mit Events nicht gerade schön, weil sie nur eine Genauigkeit von 16 Pixeln haben und sich auch nicht viel in der Geschwindigkeit machen lässt.
Pictures sind zwar pixelgenau, allerdings kann ich ein Picture ja nicht auf halber Strecke von A nach B stoppen, wenn ein Held an der Reihe ist und das Menü aufploppt, und danach weiterlaufen lassen.
Wenn ich das Picture Pixel für Pixel bewegen möchte hab ich nur eine Varianz von 0,1 Sekunde pro Pixel, was die schnellste Geschwindigkeit wär.
Allerdings werden da die Sprünge von 0,1"/p (sek pro Pixel) zu 0,2"/p zu hoch und es gäbe allgemein zu wenig Freiraum, denn wäre die Agilität um 10 schlechter, wären wir schon bei 1"/p und das is endlahm. Das Picture immer 2 Pixel zu bewegen gäbe zwar mehr möglichkeiten, allerdings wirkt es dadurch ruckelig/sprunghaft und ich kam bei der Methode bis jetzt auf maximal 26 Agilität, wenn ich mich noch richtig erinner, also mehr als 26 Agilität ginge dann nicht, allerdings musste ich dafür die Leiste auch ziemlich klein halten.
Ich hoff man kann das Problem überhaupt verstehen, hört sich ziemlich wirr an.

Kurz:
Was wäre der beste weg, ein Symbol von A nach B zu bewegen, die Geschwindigkeit des Symbols von einer Variable abhängig zu machen, und es möglich zu machen dass das Symbol dabei angehalten werden kann um danach im gleichen Tempo weiterzulaufen?

Ich würde auch Kompromisse eingehen, nur überleg ich eben schon echt lange, ohne zufriedenstellende Lösung.
Wahrscheinlich mach ichs mir einfach zu kompliziert oder denk zu perfektionistisch.
Allein die Möglichkeit ein Bild während der Bewegung anzuhalten wäre die Lösung, gibt es da irgendeinen Befehl den ich übersehe oder einen Patch?

Schonmal vielen Dank für die Hilfe und entschuldigung für die komplizierte Ausdrucksweise.

Vyzzuvazzadth
20.02.2012, 13:52
Dein Ansatz mit Pictures ist schon der richtige Weg. So wie ich das verstanden habe, verwendest du bereits eine Schleife (Loop), in der du alle 0.1 Sekunden das jeweilige Picture um X Pixel bewegst.
0.1 Sekunden sind für solche Spielereien natürlich zu viel, bzw. schränken zu fest ein.
Der Maker stellt aber noch kleinere Zeiteinheiten für Waits zur Verfügung, die auf den ersten Blick nicht ersichtlich sind, ausser man versteht die Mechanik dahinter.

Wait 0.0 Sek.

"0.0 Sekunden" steht nicht für "kein Warten", sondern hat die Länge genau eines Frames. Da der Maker mit 60 Frames pro Sekunde arbeitet, entspricht ein 0.1 Wait genau sechs 0.0 Waits. Damit kannst du die Bildbewegungsgeschwindigkeiten in der Schleife viel feiner abstimmen.

@komplizierte Ausdrucksweise: also ich hab alles prima verstanden ^^

- Vyzz


EDIT:
Velsarbor hat übrigens keine Zeitleiste, sondern bloss eine Zugreihenfolge-Anzeige, welche mit Events gelöst wurde. Ein besseres Beispiel für eine solche Zeitleiste wäre nebst "Epic Fail Saga" wohl eher "Alternate - Virus of Ragnarök".

Cherry
20.02.2012, 15:05
Eine weitere Möglichkeit ist noch, mit Quasi-Kommazahlen zu rechnen, d.h. du rechnest z.B. mit dem Hundertfachen und teilst das vor dem Anzeigen durch 100 sodass du quasi zwei "Kommastellen" kriegst.

Motris
21.02.2012, 19:24
"0.0 Sekunden" steht nicht für "kein Warten", sondern hat die Länge genau eines Frames. Da der Maker mit 60 Frames pro Sekunde arbeitet, entspricht ein 0.1 Wait genau sechs 0.0 Waits. Damit kannst du die Bildbewegungsgeschwindigkeiten in der Schleife viel feiner abstimmen.

Ah, das is natürlich super.
Ich probier dann die Tage mal damit rum, wie lange die Leiste optimalerweise sein muss, etc.
Das dürfte das ganze auf jeden Fall variabler machen.

Vielen Dank!



Velsarbor hat übrigens keine Zeitleiste, sondern bloss eine Zugreihenfolge-Anzeige, welche mit Events gelöst wurde. Ein besseres Beispiel für eine solche Zeitleiste wäre nebst "Epic Fail Saga" wohl eher "Alternate - Virus of Ragnarök".

Mein Fehler, is doch schon etwas her dass ich Velsarbor gespielt hab. Wusste nur noch dass da ne Leiste war.



Eine weitere Möglichkeit ist noch, mit Quasi-Kommazahlen zu rechnen, d.h. du rechnest z.B. mit dem Hundertfachen und teilst das vor dem Anzeigen durch 100 sodass du quasi zwei "Kommastellen" kriegst.

Ich weiß im Prinzip was du meinst, steh aber grad etwas auf dem Schlauch wie mir das bei diesem speziellen Problem weiterhilft.

Momentan wird die Position des Bildes auf der X-Achse durch eine Variable bestimmt, die in einem bestimmten Zeitabstand +1 gerechnet wird, damit sich das Bild in einer bestimmten Zeit um einen Pixel nach rechts bewegt.

Danke trotzdem an euch beide!

Vyzzuvazzadth
21.02.2012, 19:42
Gern geschehen :)

Wenn du dir noch mehr Detailwissen einverleiben willst, habe ich eine Lektüre für dich, falls du den Thread noch nicht gesehen hast: klich mich (http://www.multimediaxis.de/threads/71-Detail-Wissen-und-Geheimnise-des-RPG-Makers-vorallem-f%C3%BCr-Erfahrene-Profis-lehrreich)
Steht viel interessantes drin.

TwoFace
22.02.2012, 11:17
ich würd's lieber mit Events machen, da is die Chance geringer, dass du die Performance deines Spiels ungewollt herunterbremst.

mfG Penetranz

Vyzzuvazzadth
22.02.2012, 12:46
Bei einer "Real-Time"-Zeitleiste, die jederzeit unterbrochen werden können soll, sind Events fehl am Platz, da die sich bloss in dem 16x16 Pixelraster bewegen lassen und in Punkto verschiedenen Geschwindigkeiten sehr eingeschränkt sind. Da helfen nur Pictures. Betreffend Performance muss nur darauf geachtet werden, dass für die Bewegung lediglich der "Move Picture"-Befehl benutzt wird. Dann sehe ich kein Problem.

Cherry
22.02.2012, 14:42
Ich weiß im Prinzip was du meinst, steh aber grad etwas auf dem Schlauch wie mir das bei diesem speziellen Problem weiterhilft.

Momentan wird die Position des Bildes auf der X-Achse durch eine Variable bestimmt, die in einem bestimmten Zeitabstand +1 gerechnet wird, damit sich das Bild in einer bestimmten Zeit um einen Pixel nach rechts bewegt.

Danke trotzdem an euch beide!

Ich meinte damit dass du z.B. mit Hundertelpixeln rechnest. Z.B. Die Variable "X (hundertstel)" erhöhst nach einem bestimmten Zeitabschnitt um 25 - das würde dann heißen dass du es quasi um 0,25 Pixel verschiebst. Vor dem Anzeigen rechnest du dann "dividert durch 100" und hast die aktuellen Ganzzahlpixelwerte. Nur als Beispiel.

Motris
22.02.2012, 17:18
Gern geschehen :)

Wenn du dir noch mehr Detailwissen einverleiben willst, habe ich eine Lektüre für dich, falls du den Thread noch nicht gesehen hast: klich mich (http://www.multimediaxis.de/threads/71-Detail-Wissen-und-Geheimnise-des-RPG-Makers-vorallem-f%C3%BCr-Erfahrene-Profis-lehrreich)
Steht viel interessantes drin.

Danke! Der Thread is toll, kannte ich tatsächlich noch nicht.
Hilft mir auf jeden Fall weiter, da ich einige technische Spielereien ausprobieren möchte, die natürlich möglichst flüssig und bugfrei laufen sollen.



Ich meinte damit dass du z.B. mit Hundertelpixeln rechnest. Z.B. Die Variable "X (hundertstel)" erhöhst nach einem bestimmten Zeitabschnitt um 25 - das würde dann heißen dass du es quasi um 0,25 Pixel verschiebst. Vor dem Anzeigen rechnest du dann "dividert durch 100" und hast die aktuellen Ganzzahlpixelwerte. Nur als Beispiel.

Ahh, darauf bin ich gar nicht gekommen. Könnte ich tatsächlich gebrauchen. Danke!