Ergebnis 1 bis 20 von 1418

Thema: Technik-Sammelthread für Probleme und Antworten

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Naja die Logik ergibt so nicht so viel Sinn, da du alles verschachtelst hast aber eigentlich immer 2 Dinge überprüfst. Es ist so, wie Linkey schrieb, es wird z.B. gar nichts gemacht wenn der Held horizontal mehr als 5 Felder weg ist.

    Das wäre zu lösen indem du die Bedingungen einfach untereinander packst anstatt verschachtelt, aber selbst dann stimmts nicht weil wenn die Entfernung in X und Y verschieden ist, wird in vielen Fällen wieder gar nichts passieren.

    Was du wirklich brauchst ist eine tatsächliche Distanz (Länge des Distanzvektors), die wäre die Quadratwurzel aus x²+y² (Pythagoras). Jetzt hat der Maker zwar keine Wurzelfunktion, aber das macht nichts weil du halt stattdessen nicht mit der gewünschten Entfernung d (z.B. 5) sondern mit dem Quadrat davon d² (z.B. 25) vergleichen kannst (d²=x²+y²).

    Außerdem willst du ja nur dann den Sound erneut abspielen, wenn sich die Lautstärke geändert hat, oder wenn er durchgelaufen ist, d.h. wir müssen auf die Änderung überprüfen und anstatt eines statischen Waits einen Framezähler nehmen der bis zu 25.7 Sekunden = 1542 Frames zählt.

    Mein Vorschlag wäre daher folgender:

    Code:
    * Var X = X von Held
    * Var Y = Y von Held
    * Var X -= X von Wasserfall
    * Var Y -= Y von Wasserfall
    * Var X *= Var X <<< hier brauchen wir keine Überprüfung auf negative Zahlen mehr, weil wir den Wert eh quadrieren
    * Var Y *= Var Y
    * Var DistanzQuadrat = X
    * Var DistanzQuadrat += Y
    * Var NeueLautstärke = 0
    * If DistanzQuadrat < 225 <<< d.h. <15 Felder (quadriert)
    ... * Var NeueLautstärke = 1
    : end
    * If DistanzQuadrat < 144 <<< d.h. <12 Felder (quadriert)
    ... * Var NeueLautstärke = 2
    : end
    * If DistanzQuadrat < 64 <<< d.h. <8 Felder (quadriert)
    ... * Var NeueLautstärke = 3
    : end
    * If DistanzQuadrat < 25 <<< d.h. <5 Felder (quadriert)
    ... * Var NeueLautstärke = 4
    : end
    * If Var NeueLautstärke != Var AktuelleLautstärke <<< hat sich die Lautstärke geändert?
    ... * Var ZeitÜbrig = 0 <<< direkt neues Abspielen des Sounds auslösen
    ... * Var AktuelleLautstärke = Var NeueLautstärke
    : end
    * If Var ZeitÜbrig <= 0
    ... * Play SE 0% <<< zuerst alten Sound stoppen
    ... * Play SE 0%
    ... * Play SE 0%
    ... * Play SE 0%
    ... * If Var AktuelleLautstärke == 1 <<< Hinweis: Überprüfung auf Lautstärke 0 nicht nötig weil der Sound dann einfach gar nicht gespielt wird
    ... ... * Play SE 25%
    ... : end
    ... * If Var AktuelleLautstärke == 2
    ... ... * Play SE 50%
    ... : end
    ... * If Var AktuelleLautstärke == 3
    ... ... * Play SE 75%
    ... : end
    ... * If Var AktuelleLautstärke == 4
    ... ... * Play SE 100%
    ... : end
    ... * Var ZeitÜbrig = 1542 <<< Dauer des Sounds in Frames (25.7s * 60 FPS = 1542)
    * Var ZeitÜbrig -= 1 <<< verbleibende Zeit für den Sound bis zum Loopen um 1 Frame runterzählen
    (kein Wait 0.0 nötig, denn da das ein Parallel Process ist, wird ohnehin 1 Frame gewartet bis das Event wieder von vorne anfängt)
    Um das ganze zu resetten, z.B. wenn man die Map frisch betritt, einfach ZeitÜbrig auf 0 setzen.

    An deiner Stelle würde ich für die Abfrage der Koordinaten des Wasserfalls direkt "This Event" verwenden und den Code in das Wasserfall-Zentrums-Event selber packen. Dann kannst du es beliebig auf andere Maps kopieren ohne was zu ändern (bzw. nur den Sound zu ändern, wenn nötig).

    Das ganze hat noch einen Haken: Wenn keine Events ausgeführt werden können, z.B. wenn man ins Menü geht oder eine Screentransition stattfindet (Show/Hide Screen), wird der Zähler auch nicht reduziert (das Problem hättest du mit deinem Wait aber auch), d.h. danach glaubt der das Spiel, der Sound ist weniger weit fortgeschritten, als er wirklich ist, und es entsteht eine Lücke wenn der Sound ausläuft, das Game es aber noch nicht weiß. Das könnte man zumindest einigermaßen abfedern indem man den Sound in der Sounddatei selber mehrfach geloopt reinmacht und aber trotzdem für den Zähler die einfache Länge verwendet, dann gibts zumindest einen Puffer, wo es nicht auffällt wenn man kürzer als dieser Puffer lang ist sich im Menü o.ä. befindet.

    @Nagasaki: Ich würde vermuten, die Tatsache dass Sound-Effekte nicht MIDI oder MP3 sein können und auch nicht automatisch gespeichert, beendet und wiederhergestellt werden wenn man z.B. kämpft, und auch unterbrochen werden würden wenn man ins Menü geht und dazwischen die Musik ausläuft (was sicher mehr auffällt als beim Sound) wird wohl dagegen sprechen... Aber je nach Rahmenbedingungen kanns natürlich eine interessante Herangehensweise sein. (Neuere Maker haben genau dafür ja BGS...)

    Geändert von Cherry (24.02.2021 um 14:39 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •