Ergebnis 1 bis 7 von 7

Thema: Frage zu Message-Box und Text-Soundeffekten

  1. #1

    Frage zu Message-Box und Text-Soundeffekten

    Betrifft: RGSS3 (RPG Maker VX Ace)

    Hallo zusammen und frohes neues Jahr,

    ich habe ein sehr individuelles Problem. Und zwar habe ich in meine Textboxen einen ablaufenden Text (Buchstabe für Buchstabe...) mit passendem "Schreibmaschinen-Sound", also ein SE, der bei jedem geschriebenen Buchstaben/Zeichen ausgelöst wird.

    Nun ist es so, dass wenn die Messages ablaufen, dieser Sound immer ein bisschen über die letzten dargestellten Zeichen hinausreicht, so als wären am Ende noch weitere unsichtbare Zeichen, die den Sound auslösen. Was ich weiß ist, dass das Zeichen, welches zum Seitenumschlag dient (dieser kleine Pfeil unten an der Box der erscheint, wenn man drücken soll) diesen Sound auch auslöst, also anscheinend als ganz normales Zeichen der Textbox gewertet wird. Auch hat es was mit Anhängen wie \s[*] oder \| etc. zu tun, ich weiß nicht ob da auch irgendwas als unsichtbares Zeichen der Textbox hinzugezählt wird, sodass der Sound weiter über das Ende des eigentlichen Textes erklingt. Jedenfalls möchte ich, dass er punktuell mit dem letzten sichtbaren Zeichen endet.

    Eine mögliche Lösung wäre nach spontaner Überlegung, den o.g. Pfeil nicht als Zeichen gelten zu lassen, wobei ich nicht weiß, ob das anderweitig Implikationen hätte. Oder man könnte den Sound per Script manuell um eine bestimmte Anzahl an Zeichen verkürzen, also müsste das Script quasi checken, wie viele Zeichen in der Textbox sind und diese um X subtrahieren, den Sound also auch nur so oft auslösen.

    Ich habe nur leider keine Ahnung, ob und wie das geht, da ich erst vor 5 Tagen mit dem RPG Maker VX Ace angefangen habe, zu entwickeln. Ich poste gerne die Scripts, die ich verwende, wenn ihr sie braucht (ich weiß nur nicht, in wie weit das i.O. ist). Zur Info: ich nutze für den Soundeffekt "Text Sound Effect v3" von Zerbu und generell auch das "ATS: Special Message Codes" v1.0.6 von modern algebra.

    Wäre echt klasse, wenn mir hier jemand weiterhelfen kann.
    Viele Grüße

    Geändert von Nishi (02.01.2014 um 02:53 Uhr) Grund: Wichtige Angabe

  2. #2
    Da ich nicht weis wie die Scripte genau aussehen, oder wie sie intern funktionieren, kann ich nur schätzen was du machen könntest.

    Ich nehme an, dass das Script Zeichen für Zeichen des Textes einliest, und dann für jedes Zeichen den Ton erklingen lässt. Was du also machen müsstest, ist es, beim Einlesen der Zeichen eine Bedingung hinzu zu fügen. Nur falls die Bedingung erfüllt ist wird der Sound abgespielt. Die Bedingung wäre dann zu schauen, ob das Zeichen ein "sichtbares" Zeichen ist oder nicht. Dafür gibt es wiederum verschiedene Möglichkeiten.

  3. #3
    Gerade mal kurz nach dem Script geschaut, füge einfach folgende Bedingung ein (rot markiert):
    Code:
    class Window_Message < Window_Base
          include Text_Sound_Effect
          #--------------------------------------------------------------------------
          # alias method: process_characer
          #--------------------------------------------------------------------------
          alias textsound_process_character_normal process_character
          def process_character(c, text, pos)
            if !MESSAGE_SOUND_DISABLE or !$game_switches[MESSAGE_SOUND_DISABLE] and
              !["\e","\n","\f"].include?(c)
    Damit sollten die unsichtbaren Zeichen keine Sounds mehr erzeugen. Sollte es noch mehr ungewünschte Zeichen geben (bspw. die Leerstelle, kannst du die auch noch in die Bedingung mit aufnehmen). Das ist nur ein Beispiel, wie du es lösen könntest.

  4. #4
    Danke euch beiden, habe es gerade mit der Bedingung versucht und der Sound wird jetzt nicht mehr abgespielt, wenn der Umschlagpfeil erscheint. Aber ein paar Sounds erscheinen noch über das Ende des Satzes. Wofür stehen denn die \e \n \f ? Bezieht sich dieses \n z.B. nur auf Zeilenumbrüche, oder deckt das eine ganze Kategorie von Special Codes ab (da ich z.B. auch \s[150] und sowas verwende). Und was muss ich da noch abändern, damit Leerstellen ebenfalls rausgenommen werden sollen?

    Hier ist mal eine Message-Endung von mir als Beispiel: Text... \c[0] /i \s[160] \^

    Geändert von Nishi (02.01.2014 um 15:56 Uhr)

  5. #5
    Das "\n" ist das ASCII Symbol für den Line-Feed, also den Zeilenumbruch. Das hat historische Wurzeln.
    Es stellt nur ein einziges Zeichen dar, nämlich das unsichtbare "nächste-Zeile" Zeichen.

    Die Methode von Linkey würde funktionieren, ist aber nicht die sauberste Lösung, da du jedes Zeichen in das Array hard-coden musst.
    Du müstest zwischen den zwei eckigen Klammern im Rot hinterlegten Code-Fragment alle Zeichen hinzufügen, welche du verstummt haben möchtest.

    Das Problem dabei ist, dass deine Kombinationen, wie zum Beispiel "\c" nicht ein einziger Buchstabe sind, sondern aus zweien bestehen. Diese Methode würde also bei diesen Kombinationen nicht direkt funktionieren.
    Man könnte das Script vielleicht so umschreiben, dass es zunächst ein Wort einliest, untersucht ob es sich bei diesem Wort um ein "echtes" Wort handelt oder um ein Script-Fragment, und nur falls es ein echtes Wort ist die Methode "textsound_process_character_normal" für jedes Zeichen in dem Wort aufrufen.
    Da ich nicht weis wie genau das ganze Script aussieht kann ich nicht sagen wie kompliziert das wäre.

    Alternativ könnte man auch den Text filtern bevor er überhaupt an das Script weitergeleitet wird. Alle Scripte im Text zunächst auswerten und die Werte einfügen, und dann erst den Sound generieren lassen.
    Auch hierbei kann ich nicht sagen wie kompliziert dies für dieses spezielle Script wäre.

  6. #6
    Alles klar, ich habe mein Wunschergebnis erreicht. Habe - wie du sagtest - alles manuell aufgezählt. Ob besonders schön oder nicht, eine intelligente Wortabfrage wäre mir jetzt ein Stein im Weg gewesen.

    Hier der Code, mit dem es funktioniert:

    Code:
    class Window_Base < Window
      include Text_Sound_Effect
      #--------------------------------------------------------------------------
      # alias method: process_character
      #--------------------------------------------------------------------------
      alias textsound_process_character_normal process_character
      def process_character(c, text, pos)
        if !$game_switches[MESSAGE_SOUND_DISABLE] and 
          !["\e","\n","\f","\s","/i"," ","\^"].include?(c)
    Danke noch mal!

  7. #7
    @Cornix
    Nicht ganz richtig. Normal fängt der Maker mit "\e" die Code-Befehle in einer Message ab. D.h. Befehle wie \c[5], \| usw. werden vollkommen ignoriert. Allerdings macht der Maker das nicht für alle Befehle, was mir vorher nicht klar war.
    Was im oben genannten Beispiel den Sound verursacht hatte war /i, \s[] und die Leerzeichen.

    Aber ju, unschön/unsauber ist das ganze schon. Wenn durch \e jegliche Steuer-Befehle gefiltert würden, wäre es zumindest relativ übersichtlich gewesen.

Berechtigungen

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