Ergebnis 1 bis 9 von 9

Thema: [XP] Ein paar Probleme.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [XP] Ein paar Probleme.

    Moin liebe Community.

    Nur so für den Anfang:
    Ich habe jahrelang mit dem Rm2k gearbeitet und will mal behaupten, dass ich damit ordentlich umgehen konnte. Nun hatte ich eine Makerfreie Zeit von 2 Jahren (abi, ausbildung etc) und habe mich wieder rangewagt... und zwar an dem RmXP.

    Nun habe ich hier aber einige Probleme, gerade, was Rubybezogene Dinge angeht.

    Und zwar:

    Möchte ich gerne wissen wie ich z.B SEs per Script direkt beim Event abspielen kann

    Zitat Zitat
    if
    Input.trigger?(Input:)
    then
    -->hier soll der sound abgespielt werden<--
    $game_variables[10] =
    $game_variables[10] + 1
    Held = Held + "A"
    end
    Das ist teil eines eigenen Namenseingabebildschirms (ich weiß, ich weiß, wäre auch per condition branch gegangen hab ich aber zu spät gesehen und wollte die 52 script events nicht nochmal ändern) wobei bei der Auswahl eben ein Sound erklingen soll.

    Ich muss auch mal sagen, ich durchstöbere schon etliche Stunden das gesamte Netz zu dem RmXP und Ruby und bin viel am lesen habe aber noch keine brauchbare Datenbank gefunden, die beinhaltet, welches Rubyäquivalent für die Makereigenen Variablen und Switches etc zu verwenden ist (korrigiert mich bitte, falls solch eine Datenbank existiert).

    Ich habe daraufhin selbst ein wenig im Script-Editor geforscht und habe bis jetzt (mit dem Inet zs) dies herausgefunden (falls es jemand braucht der auch das Problem hat):

    Zitat Zitat
    ---- Tastenabfragen ---------------------------------------------------

    if
    Input.trigger?(Input:X)
    then
    [BEFEHL]
    else
    [BEFEHL]
    end


    Für XX einsetzen :

    C = Entertaste


    ---- Ruby Zugriff auf Maker verwendete Variablen\Strings --------------

    Normale Variablen
    $game_variables[XX] = YY

    Normale Switches
    $game_switches[XX] <----- Ich habw hier aber keine Ahnung wie den auf on/off setze


    Heldname (X = Nummer des Helden)
    $game_actors[X].name = "NAME"



    Spielergschwindigkeit
    $game_system.move_speed = 1
    Ein weiteres Problem :
    Wie kriege ich es möglichst einfach hin, Bildschirmübergänge wie beim Rm2k zu konstruieren. Ich würde gerne so einen Übergang wie beim guten alten Zelda umsetzen (Neue Map scrollt rein, alte in diesselbe Richtung heraus)
    Ich möchte ungerne einfach ein gepostetes Script bei mir einfügen, deshalb würde ich mir wünschen jemand könnte mir erklären, wie ich das selbst auf die reihe kriege (versteh bei ruby bis jetzt aber nur: Variablen, Strings, Rechnungen, einfachste Tastenabfragen(s.o.)... mehr nicht...)

    Und ich wäre sher erfreut, wenn mir jemand erklären könnte, wie genau eine Tastenabfrage funktioniert (mit diesem win32 API ?!)
    Ich brauche einfach nur die Anleitung zum erstellen eines Scripts der jeden tastendruck in eine Makervariablenkompatible Zahl ausdrückt. Den Rest kann ich dann selbst .

    Edit:
    Was mir noch eingefallen ist, wie lasse ich per Ruby einen Ingamemessageblock erscheinen?

    Liebe Grüße, Kampfwurst

    Geändert von Kampfwurst (18.09.2010 um 16:34 Uhr)

  2. #2
    ON/OFF bei Switches ist auf Rubyseite true/false. Also z.B.
    Code:
    $game_switches[3] = true
    Zitat Zitat
    Möchte ich gerne wissen wie ich z.B SEs per Script direkt beim Event abspielen kann
    Code:
    $game_system.se_play(RPG::AudioFile.new("mein_soundeffekt"))
    Zitat Zitat
    Ich muss auch mal sagen, ich durchstöbere schon etliche Stunden das gesamte Netz zu dem RmXP und Ruby und bin viel am lesen habe aber noch keine brauchbare Datenbank gefunden, die beinhaltet, welches Rubyäquivalent für die Makereigenen Variablen und Switches etc zu verwenden ist
    Verstehe nicht ganz was du meinst. Wie du auf die Switchs und Variablen des Makers per Ruby zugreifst, hast du ja bereits rausgefunden. In Ruby selbst organisiert man seine Daten in Datenstrukturen. Damit die abgespeichert werden, muss man eine Referenz von $game_(system|temp|screen|party|player) auf die jeweilige Datenstruktur machen.

    Mal ein einfaches Beispiel: Du willst eine Hungeranzeige für dein Team basteln.
    Code:
    class Game_Party
      attr_accessor :hunger
    end
    Jetzt kannst du mit $game_party.hunger auf den Hungerwert zugreifen und diesen mit $game_party.hunger = neuer_wert auf einen neuen Wert setzen.

    Zitat Zitat
    Wie kriege ich es möglichst einfach hin, Bildschirmübergänge wie beim Rm2k zu konstruieren. Ich würde gerne so einen Übergang wie beim guten alten Zelda umsetzen (Neue Map scrollt rein, alte in diesselbe Richtung heraus)
    Theoretisch müsstest du beide Maps gleichzeitig anzeigen und die alte Map wegbewegen. Das ist möglich, aber nicht ganz unkompliziert. Hab jetzt jedenfalls nicht die Zeit sowas zu schreiben.

    Zitat Zitat
    Und ich wäre sher erfreut, wenn mir jemand erklären könnte, wie genau eine Tastenabfrage funktioniert (mit diesem win32 API ?!)
    Hast du doch auch schon rausgefunden: Input.trigger?(Input:) z.B. fragt die Enter-Taste ab. Die Auswahl aller Tasten findest du in der Helpdatei des Makers (einfach in Index mal nach Input suchen). Wenn du noch andere Tasten abfragen musst, dann solltest du dir ein Keyboard-Script suchen. Davon gibt es ja etliche. Selbst mit der WinAPI rumbasteln würde ich dir nicht empfehlen, dass ist nämlich auch etwas komplizierter.

    Ansonsten: Ruby/RGSS-Tutorial

  3. #3
    Ah super, vielen Dank für die schnelle Hilfe.

    Zitat Zitat

    Zitat Zitat
    Ich muss auch mal sagen, ich durchstöbere schon etliche Stunden das gesamte Netz zu dem RmXP und Ruby und bin viel am lesen habe aber noch keine brauchbare Datenbank gefunden, die beinhaltet, welches Rubyäquivalent für die Makereigenen Variablen und Switches etc zu verwenden ist
    Verstehe nicht ganz was du meinst. Wie du auf die Switchs und Variablen des Makers per Ruby zugreifst, hast du ja bereits rausgefunden. In Ruby selbst organisiert man seine Daten in Datenstrukturen. Damit die abgespeichert werden, muss man eine Referenz von $game_(system|temp|screen|party|player) auf die jeweilige Datenstruktur machen.
    Das Problem hierbei war, dass ich in der Hilfe zwar dieVerweise darauf gefunden hab, das ganze mit den attr_accesor aber nicht verstanden habe. Das Problem ist aber trotzdem, dass ich nicht finde, wie die Makereigenen Befehle über Ruby umzusetzen sind. Danke für die Erklärung.

    Zitat Zitat


    Zitat Zitat
    Und ich wäre sher erfreut, wenn mir jemand erklären könnte, wie genau eine Tastenabfrage funktioniert (mit diesem win32 API ?!)
    Hast du doch auch schon rausgefunden: Input.trigger?(Input:) z.B. fragt die Enter-Taste ab. Die Auswahl aller Tasten findest du in der Helpdatei des Makers (einfach in Index mal nach Input suchen). Wenn du noch andere Tasten abfragen musst, dann solltest du dir ein Keyboard-Script suchen. Davon gibt es ja etliche. Selbst mit der WinAPI rumbasteln würde ich dir nicht empfehlen, dass ist nämlich auch etwas komplizierter.
    Ich meinte eigentlich, ob es einen Befehl gibt (am besten für die ganze Tastatur... scheint ja nur mit TastaturScripts zu gehen), der nicht wartet ob eine bestimmt taste gedrückt wird, sondern jeden Tastendruck erfasst und weitergibt, welche gedrückt wurde.

    Zitat Zitat
    Theoretisch müsstest du beide Maps gleichzeitig anzeigen und die alte Map wegbewegen. Das ist möglich, aber nicht ganz unkompliziert. Hab jetzt jedenfalls nicht die Zeit sowas zu schreiben.
    Also lässt sich der blöde makereigene Fadeeffekt nicht so einfach ändern...
    Ich könnte sonst ja auch von jeder Map einen Screenshot machen und diese dann als Übergang mit einem teleport ohne fade nutzen. Werde ich versuchen.

    Ich bin gerade übrigens vor ein weiteres Problem gestoßen. Wie lasse ich mir denn Bilder per Ruby anzeigen (befehlsäquivalent zu Show Picture)

    Edit:
    Hab gerade das mit dem Soundeffekt ausprobiert. Muss ich da den Dateinamen eingeben, oder das was im Maker angezeigt wird ? Wollte System07 abspielen lassen.
    Edit2:
    Bei mir kommt immer nur Syntax error... Ich weiß ich bin noch nicht so die Leuchte, was Ruby angeht. Habe versucht:
    Code:
    $game_system.se_play(RPG::AudioFile.new("007-System07"))
    $game_system.se_play(RPG::AudioFile.new("007-System07.ogg"))
    $game_system.se_play(RPG::AudioFile.new("System07"))

    Geändert von Kampfwurst (18.09.2010 um 17:08 Uhr)

  4. #4
    Ich denke, dass
    Code (Ruby):
    $game_system.se_play(Dateiname)
    reichen würde. Zb.
    Code (Ruby):
    $game_system.se_play("007-System07")
    oder auch
    Code (Ruby):
    $game_system.se_play($data_system.decision_se)
    Getestet habe ich es leider nicht, weshalb ich dir keine Garantie geben würde.

  5. #5
    Code (ruby):
    $game_system.se_play(RPG::AudioFile.new("007-System07"))
    Das müsste so korrekt sein. Eventuell wird der Syntaxfehler an einer anderen Stelle ausgelöst?

    Zitat Zitat
    Das Problem ist aber trotzdem, dass ich nicht finde, wie die Makereigenen Befehle über Ruby umzusetzen sind. Danke für die Erklärung.
    Du findest die Rubyumsetzung jedes Event-Befehls in der Interpreter-Klasse. In Interpreter 2 findest du eine große Case-Verzweigung:
    Code (ruby):
    # Branch by command code
        case @list[@index].code
        when 101  # Show Text
          return command_101
        when 102  # Show Choices
          return command_102
        when 402  # When [**]
          return command_402
        when 403  # When Cancel
          return command_403
        when 103  # Input Number

    Die Kommentare geben kann, welche Eventfunktion gemeint ist, darunter steht der Name der dazu gehörigen Methode. Wichtig ist, dass wirklich jede Eventcode-Zeile ein eigener Befehl ist. Darum ist z.B. command_101 für die erste Zeile von Show Text zuständig. In Interpreter 3 (und den anderen) findest du dann z.B. die Methode def command_101 die einen show Text Befehl ausführt.

    Zitat Zitat
    Ich meinte eigentlich, ob es einen Befehl gibt (am besten für die ganze Tastatur... scheint ja nur mit TastaturScripts zu gehen), der nicht wartet ob eine bestimmt taste gedrückt wird, sondern jeden Tastendruck erfasst und weitergibt, welche gedrückt wurde.
    Das ist das Standard-Verhalten. Übrigens auch im Maker (beim Conditional Branch Befehl). Wenn du alle Tasten nacheinander abfragst liefert er nur für jene true zurück, die auch gedrückt wurden.

    Zitat Zitat
    Ich könnte sonst ja auch von jeder Map einen Screenshot machen und diese dann als Übergang mit einem teleport ohne fade nutzen. Werde ich versuchen.
    Klingt mir sehr umständlich. Wie gesagt, es ist ja in Ruby machbar. Einfacher wäre du suchst dir einen Scripter der Lust und Zeit hat sowas zu schreiben.

    Zitat Zitat
    Ich bin gerade übrigens vor ein weiteres Problem gestoßen. Wie lasse ich mir denn Bilder per Ruby anzeigen (befehlsäquivalent zu Show Picture)
    So wird das nichts. Ruby ist nicht der Event-Editor. Es gibt da keine "äquivalenten" Befehle, weil in Ruby völlig anders vorgegangen wird. Du kannst natürlich von Ruby aus Maker-Pictures anzeigen und bewegen, in dem du einfach den Code ausführst, der auch beim Show-Picture Befehl ausgeführt wird (wie oben gesagt: einfach in der entsprechenden Methode in der Interpreterklasse nachschlagen). Aber wenn du in Event-Code denkst, solltest du auch mit Event-Code arbeiten und nur dann zu Ruby greifen, wenn du irgendeine Funktion brauchst, die normaler Event-Code nicht hinbekommt. Ansonsten würde ich diesen Mix aus Ruby und Event-Code vermeiden. Wenn du Ruby scripten willst, dann rate ich dir, es richtig zu lernen und nicht einzelne Rubybefehle für bekannte Eventbefehle zu suchen.

  6. #6
    Zitat Zitat
    So wird das nichts. Ruby ist nicht der Event-Editor. Es gibt da keine "äquivalenten" Befehle, weil in Ruby völlig anders vorgegangen wird. Du kannst natürlich von Ruby aus Maker-Pictures anzeigen und bewegen, in dem du einfach den Code ausführst, der auch beim Show-Picture Befehl ausgeführt wird (wie oben gesagt: einfach in der entsprechenden Methode in der Interpreterklasse nachschlagen). Aber wenn du in Event-Code denkst, solltest du auch mit Event-Code arbeiten und nur dann zu Ruby greifen, wenn du irgendeine Funktion brauchst, die normaler Event-Code nicht hinbekommt. Ansonsten würde ich diesen Mix aus Ruby und Event-Code vermeiden. Wenn du Ruby scripten willst, dann rate ich dir, es richtig zu lernen und nicht einzelne Rubybefehle für bekannte Eventbefehle zu suchen.
    Ja, du hast recht, es wäre das Beste, Ruby sofort ganz zu lernen. Das Problem ist nur, dass ich jetzt sehr sehr viele Event Script codes nach diesem Schema habe:

    Code:
    if
    Input.trigger?(Input::C)
    then
    -->hier soll der sound abgespielt werden<--
    $game_variables[10] =
    $game_variables[10] + 1
    Held = Held + ""BUCHSTABE""
    end
    Sobald ich hier $game_system.se_play(RPG:udioFile.new("007-System07")) einfüge sagt er mir syntax error, sonst nicht . Ich Versuche die anderen Möglichkeiten von Adrian 2000 mal.

    Für jeden Buchstaben upper und lower case im Alphabet.
    Und am Ende bei $game_variables[10] = 8 kommt:

    Code:
    if
    Input.trigger?(Input::C) 
    then 
    $game_actors[1].name = Held
    teleport(8, 7, 9)
    end
    Wobei:

    Code:
    def teleport(id, x, y)
    $game_temp.player_transferring = true
    $game_temp.player_new_map_id = id
    $game_temp.player_new_x = x
    $game_temp.player_new_y = y
    $game_temp.player_new_direction = 0
    Graphics.freeze
    $game_temp.transition_processing = true
    $game_temp.transition_name = ""
    end
    Und da ich schon angefangen habe Ruby zu lernen, es ja aber "nicht ganz" kann (gerade mal die nötigsten Grundlagen vllt... ^^), muss ich die Makerbefehle teilweise in meine Ruby-Event-Scripts mit einbauen.

    In gewisser Weise ist dies auch meine Art, Ruby zu lernen. Zu gucken, wie macht der Maker bestimmt Dinge und wie mache ich sowas mit Ruby. Viele Dinge sind da ja schon vordefeniert. Ich komme einfach noch nicht mit der ganzen Syntax klar und weiß nicht so recht wie ich auf was zugreife (und ja, ich bin dabei mir den Ruby Grundkurs durchzulesen , das prob ist ich benötige Dinge wie print und so ja nicht, da ich ja hauptsächlich den Maker und nur für zusatzfunktionen (Strings, Arrays, Tastenabfragen und erweiterte Variablenverarbeitung) Ruby benutze). Darf ich mal eine Demo hochstellen und ihr sagt mir dann dazu, ob mein Ansatz, ein Spiel zu Programmieren mit Ruby so falsch ist?

    Geändert von Kampfwurst (19.09.2010 um 12:18 Uhr)

  7. #7
    Hier ist mein Testprojekt (mit eigener Namenseingabe und dem Bildschirmscrollen (aber nur in 2 Richtungen))

    TestProjekt.rar

    Dann guckt euch meinen Schlamassel mal an
    (Script Editor, Commun Events, Events)

    Edit:
    Sry für den Doppelpost...

    Edit 2:
    Die beiden Möglichkeiten von Adrian 2000 funktionieren auch nicht.
    Bei der ersten kommt ein MoMethodError Game_System und bei der zweiten kommt wieder ein Syntax error.

    Geändert von Kampfwurst (19.09.2010 um 12:14 Uhr)

  8. #8
    Code (ruby):
    if
    Input.trigger?(Input::C)
    then
    -->hier soll der sound abgespielt werden<--
    $game_variables[10] =
    $game_variables[10] + 1
    Held = Held + ""BUCHSTABE""
    end

    Das hier ist falsch:
    Code:
    Held = Held + ""BUCHSTABE""
    Zum einen sind Variablen, die mit Großbuchstaben anfangen, Konstanten und dürfen nicht mehrfach belegt werden (wobei das in einem Script...-Befehl evtl. nicht mal einen Fehler auslöst). Wichtiger: Innerhalb von Strings dürfen keine Zeichen gesetzt werden, die das Ende des Strings kennzeichnen. In deinem Fall wäre " das Ende des Strings. Dieses Zeichen darf im String nicht vorkommen. Wenn du es setzen willst, musst du es escapen in dem du ein \ davorsetzt.

    So müsste es richtig aussehen (wobei du statt held vermutlich eher eine globale Variable o.ä. nehmen wolltest):
    Code:
    held = held + "\"BUCHSTABE\""
    Außerdem: Du darfst nicht an jeder beliebigen Stelle einen Zeilenumbruch machen. Wenn du zuviel Code hast, der nicht in einen Scriptbefehl reinpasst, dann lagere ihn in eine Methode aus und rufe nur die Methode auf. Evtl. liegt dein Syntax-Fehler auch daran, dass du an einer falschen Stelle einen Zeilenumbruch eingefügt hast.

    Zitat Zitat
    Für jeden Buchstaben upper und lower case im Alphabet.
    Und am Ende bei $game_variables[10] = 8 kommt:
    Herrje, und du hast das alles hartcoded in Script...-Befehle geschrieben?

    Zitat Zitat
    In gewisser Weise ist dies auch meine Art, Ruby zu lernen. Zu gucken, wie macht der Maker bestimmt Dinge und wie mache ich sowas mit Ruby.
    Das Problem ist, dass das Anzeigen eines Bildes z.B. in Ruby nur 1-2 Zeilen sind. Aber ein Bild in das Spiel zu integrieren, sprich das es IM Spiel angezeigt wird, kann schon mal 20 Zeilen lang werden ^^° Gleichzeitig kannst du ein Event-Menü, was im Maker zig CommonEvents mit hunderten Eventbefehlen füllt, in Ruby in ein Zehntel der Codemenge scripten. Das sind einfach zwei verschiedene Welten. Dafür brauchst du nur mal dein Namenseingabescript mit dem des Makers vergleichen (Scene_Name, Window_NameInput, Window_NameEdit).

    Zitat Zitat
    (und ja, ich bin dabei mir den Ruby Grundkurs durchzulesen , das prob ist ich benötige Dinge wie print und so ja nicht
    Das ist ja nur der Anfang. Es gibt Tutorials, die gleich damit anfangen dem Nutzer zu zeigen wie man eigene Menüs etc. schreibt und erst danach die dazu nötigen Grundlagen erklären. Das ist auch möglich, für manche sicherlich auch motivierender. In dem Rubykurs hab ich mich aber dazu entschlossen, erst die Grundlagen zu beschreiben und danach Anwendungsfälle. Die ersten paar Kapitel wirst du also nur mit print rumwerkeln. Ab dem RGSS-Kapitel wird dann aber auch gezeigt wie man ein eigenes Charakter-Auswahlmenü und ein eigenes Auswahl-Menü schreibt. Dort wird auch erklärt wie man Bilder, Menüs etc. anzeigt. Also einfach Geduld haben und von vorne bis hinten durchlesen ^^

    Zitat Zitat
    Hier ist mein Testprojekt (mit eigener Namenseingabe und dem Bildschirmscrollen (aber nur in 2 Richtungen))
    rar und exe sind eher ungünstig, wenn man unter Linux arbeitet.

  9. #9
    Zitat Zitat
    rar und exe sind eher ungünstig, wenn man unter Linux arbeitet.
    Wie brauchst du es denn?

    Zitat Zitat
    held = held + "\"BUCHSTABE\""
    Ich will ja nicht, dass die "" mit drinn sind und stimmt dass mit dem Held groß geschrieben funktioniet in den event script befehlen ;P. Aber soweit bin ich im Kurs nu auch schon um das gerafft zu haben, dass das klein geschrieben werden muss ^^. Anfängerfehler.

    Zitat Zitat
    Zitat Zitat
    Für jeden Buchstaben upper und lower case im Alphabet.
    Und am Ende bei $game_variables[10] = 8 kommt:
    Herrje, und du hast das alles hartcoded in Script...-Befehle geschrieben?
    Uhmmm... JA ? ^^ Ja war ne ziemliche Arbeit 52 einzelne scripteinträge zu machen. Sieht so aus (als common event) :

    Code:
    @>Conditional Branch: Variable [0006 : Held Pos X] == 1
      @>Conditional Branch: Variable [0007 : Held Pos Y] == 8
        @>Control Variables: [0011:Momentaner Buchstabe] = 1
        @>Script:if
                   Input.trigger?(Input::C) 
                   then 
                   $game_variables[10] = 
                   $game_variables[10] + 1
                   Held = Held + "A"
                   end
        @>
        : Branch end
      @>Conditional Branch: Variable [0007 : Held Pos Y] == 9
        @>Control Variables: [0011:Momentaner Buchstabe] = 2
        @>Script:if
                   Input.trigger?(Input::C) 
                   then 
                   $game_variables[10] = 
                   $game_variables[10] + 1
                   Held = Held + "B"
                   end
        @>
        : Branch end
    Und das halt weiterführend 52 mal. Dann ist jeder Buchstabe abgedeckt.

    Und später dann :
    Code:
    if
    Input.trigger?(Input::C) 
    then 
    $game_actors[1].name = Held
    teleport(8, 7, 9)
    end
    Und das funktioniert. Der Held wird dann richtig umbenannt und ich kriege so auch keinen fehler.

    Edit:
    Hey super. Danke für den Tipp. Hab
    Zitat Zitat
    $game_system.se_play(RPG:udioFile.new("007-System07"))
    mal in eine methode im scripteditor definiert und so funktioniert es ^^.

    Geändert von Kampfwurst (19.09.2010 um 17:15 Uhr)

Berechtigungen

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