Archiv verlassen und diese Seite im Standarddesign anzeigen : [XP] Ein paar Probleme.
Kampfwurst
18.09.2010, 15:27
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
if
Input.trigger?(Input::C)
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):
---- Tastenabfragen ---------------------------------------------------
if
Input.trigger?(Input::XX)
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
ON/OFF bei Switches ist auf Rubyseite true/false. Also z.B.
$game_switches[3] = true
Möchte ich gerne wissen wie ich z.B SEs per Script direkt beim Event abspielen kann
$game_system.se_play(RPG::AudioFile.new("mein_soundeffekt"))
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 istVerstehe 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.
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.
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.
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::C) 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 (http://www.rpg-studio.de/scientia/Ruby/RGSS/Tutorials/Rubykurs)
Kampfwurst
18.09.2010, 17:00
Ah super, vielen Dank für die schnelle Hilfe.
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.
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::C) 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.
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:
$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"))
Ich denke, dass
$game_system.se_play(Dateiname) reichen würde. Zb.
$game_system.se_play("007-System07") oder auch
$game_system.se_play($data_system.decision_se) Getestet habe ich es leider nicht, weshalb ich dir keine Garantie geben würde.
$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?
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:
# 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.
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.
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.
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.
Kampfwurst
19.09.2010, 11:54
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:
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::AudioFile.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:
if
Input.trigger?(Input::C)
then
$game_actors[1].name = Held
teleport(8, 7, 9)
end
Wobei:
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?
Kampfwurst
19.09.2010, 12:07
Hier ist mein Testprojekt (mit eigener Namenseingabe und dem Bildschirmscrollen (aber nur in 2 Richtungen))
6054
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.
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:
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):
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.
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?
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).
(und ja, ich bin dabei mir den Ruby Grundkurs durchzulesen , das prob ist ich benötige Dinge wie print und so ja nichtDas 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 ^^
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.
Kampfwurst
19.09.2010, 16:57
rar und exe sind eher ungünstig, wenn man unter Linux arbeitet.
Wie brauchst du es denn?
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.
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) :
@>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 :
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
$game_system.se_play(RPG::AudioFile.new("007-System07"))
mal in eine methode im scripteditor definiert und so funktioniert es ^^.
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.