1

Tuesday, April 14th 2015, 12:13pm

Bedingungsabfrage über Tastendruck

Hallo, ich habe mehrere Events die durch Druck auch verschiedene Tasten ausgelöst werden sollen. Dazu wollte ich eine Bedingungsabfrage machen ob die entsprechende Taste gedrückt wird. Leider scheint es im deutschen RPG Maker nur zwei Tasten zu geben bei denen das überhaubt funktioniert (C und B beim Rpg Maker scheinen X und Enter auf der Tastatur zu entsprechen) und diese sind auch noch vom Maker selbst bereits anderweitig belegt. Ist das auch eure Erfahrung oder mache ich etwas falsch und wie lässt sich das ganze beheben?

Außerdem ist mir noch aufgefallen das wenn ich z.B. die Klasse über Tastendruck ändern will das nur partiel funktioniert. Ich habe bereits gelesen das es da Einschränkungen gib allerdings funktioniert ein anderes Event bei dem ich die Gruppe und Map wechsle einwandfrei. Was ist da der Unterschied?

Volgeon

Krieger

Motto: Der Mensch ist scheiße, nur ich bin cool.

  • Send private message

2

Tuesday, April 14th 2015, 6:57pm

Wie du schon richtig erkannt hast benutzt der Maker andere Buchstaben als Tasten.

Da ich selber nicht den Ace habe, aber schon im VX Bescheid wissen wollte, wie das ist, kann dir folgender älterer Thread von mir vielleicht helfen: [VX] Steuerungsübersicht! (besonders interessant ist die dortige PDF-Datei).
  • :user-silhouette: Kontakt

  • :puzzle: Projekte

    :rmxp: Fungame: Let's Roll (2. Spieleversion - Demo)

    :cup: DrookieClicker (Testversion - Demo)

    Spoiler: :rmvx: Slime Adventure (Stop)
    In "Slime Adventure" geht es um einen (wer hätte das gedacht) Slime.
    Dieser Slime muss Kekse essen, um weiterzukommen. Manche heilen ihn und manche fügen ihm Schaden zu.
    Das Besondere hierbei ist, dass man für manche Kekse ein bestimmtes Element gegessen haben muss.
    Besonders bei den Bosskämpfen muss man aufpassen, dass man hier keinen falschen Keks erwischt.
    zum Lesen den Text mit der Maus markieren


    Spoiler: :rmvx: Drookie - The hungry Cookie (Demo in Zukunft - mit GameMakerStudio2)
    In "Drookie - The hungry Cookie" geht es um Drookie (mein Keks-Avatar),
    welcher in einem Wettkampf mit anderen großen Kekskonzernen ist. Er
    will ein Monopol bilden und frisst deshalb die Kekse der anderen
    Konzerne weg, damit diese Pleite werden. Ein ziemlich unernstes und
    unlogisches Spiel, welches nur vom Gameplay überzeugen soll. Man bewegt
    Drookie (links und rechts) und muss versuchen genügend Kekse zu essen
    (gibt eine Keks-o-meter-Anzeige).
    zum Lesen den Text mit der Maus markieren


    Spoiler: :rmvx: Drookie RPG (großes Projekt - folgt in Keks Jahren)
    In "Drookie RPG" geht es um Drookie (mein Keks-Avatar), welcher die keksige Welt vor den bösen Keksbanden aufhalten muss. Es gibt mehrere Kekse, welche ihm Beiseite stehen werden. Man hat von Anfang an ein Grundstück und dort muss man mehrere Kekse herstellen als auch Material für das Abenteuer. Das Abenteuer besteht aus der Verfolgung von mehreren Keksbanden und spannenden Quests.
    zum Lesen den Text mit der Maus markieren
  • :rmvx: :rmxp: Fähigkeiten

    :light-bulb: Ideen: :star: :star: :star: :star: :star-empty:
    :game: Eventen: :star: :star: :star: :star: :star-empty:
    :book: Story: :star: :star: :star: :star-empty: :star-empty:
    :palette: Grafik: :star: :star-empty: :star-empty: :star-empty: :star-empty:
    :map: Mappen: :star: :star-empty: :star-empty: :star-empty: :star-empty:
    :quill: Scripten: :star: :star: :star: :star-empty: :star-empty:
  • :trophy: Contests

    Bild
  • :kumpel: Bündnis

    Bündnis für
    Bündnis durch
    Bündnis mit
    Bündnis seit
    Weltherrschaft Kompromiss Evrey 03.01.2013 19:32

Playm

RPG Studio Webmaster

  • Send private message

3

Tuesday, April 14th 2015, 10:42pm

Hallo, ich habe mehrere Events die durch Druck auch verschiedene Tasten ausgelöst werden sollen.

Man kann Events verschiedene Auslösebedingungen geben, für "Auf Tastendruck" gibt es allerdings nur "Action Button" bzw. in der deutschen Übersetzung "Aktionstaste". Die Aktionstaste ist der C-Button, der auch Menüeingaben und Textnachrichten bestätigt.

Wichtig: Die Buttons die intern genutzt werden dienen nur der Vereinheitlichung. Diese werden dann dem Input der Tastatur und des Gamepads zugeordnet, also der C-Buton entspricht dann der Taste Enter und dem Gamepadknopf 3. Das macht auch Sinn, wenn Du mehrere Eingabegeräte zur Option hast, diese physischen Tasten und Gamepadknöpfe einem logischen Button zuzuordnen, um sie einheitlich abzufragen. Diese Zuorndung bestimmt der Spieler übrigens im Rahmen selber, über das Optionsmenü des RGSS Players (Ingame F1 drücken, um es zu öffnen).

Mehr Informationen findest Du in der Hilfedatei deines Makers (im Maker F1 drücken). Im RMVX Ace unter dem Kapitel RPG Maker VX Ace -> Playing a Game -> Basic Controls.
Unter Volgeons Link ist ein Auszug der Hilfedatei von PandaMaru verlinkt, aber Du solltest die (englischsprachige) Hilfedatei bei der Installation des Makers gleich mitbekommen haben.

Ist das auch eure Erfahrung oder mache ich etwas falsch und wie lässt sich das ganze beheben?

Du machst nichts falsch. Der Maker sieht es einfach nicht vor, das man Events mit verschiedenen Tasten ansprechen kann.
Das Gameplay kannst Du über eigene Ruby-Skripte erweitern, aber es bleibt trotzdem dabei, das Du im Editor nur "Aktionstaste" wählen kannst.

Außerdem ist mir noch aufgefallen das wenn ich z.B. die Klasse über Tastendruck ändern will das nur partiel funktioniert. Ich habe bereits gelesen das es da Einschränkungen gib allerdings funktioniert ein anderes Event bei dem ich die Gruppe und Map wechsle einwandfrei. Was ist da der Unterschied?
Es gibt keinen Unterschied. Zeig mal deinen Eventcode, vielleicht ist da ein Flüchtigkeits- oder Denkfehler drin.

4

Tuesday, April 14th 2015, 11:44pm

Danke für eure Hilfe. Ich weis zwar immer noch nicht wo der Fehler lag aber wenigstens funktionieren alle Tasten jetzt wie sie sollten. :)

An Playm: Im ersten Event soll bei Tastendruck nur die Klasse gewechselt werden. Das Funktioniert per se, aber häufig muss man dafür mehr als einmal drücken. Beim zweiten Event wird der Klassenwechsel nach der Teleportation vollzogen und beides funktioniert hier augeblicklich und immer.
Spoiler
Bild Bild
highlight to read

5

Wednesday, April 15th 2015, 6:49am

Hallo Svafa,

versuch doch mal bei der Bedingungsabfrage statt des Tastendrucks einen Scriptbefehl abzufragen und gib dort

Ruby Source code

1
Input.trigger?(:X) 
an.

Ich habe die Vermutung, dass auf der zweiten Eventseite auch eine Tastenabfrage ist und du beide Bedingungen permanent abfragst, sodass es Glücksache ist, den richtigen Zeitpunkt abzupassen, an dem gerade die zweite Seite aktiv ist. Bei dem anderen Event wird das vermieden, weil der Teleport die ununterbrochene Abfrage verhindert.
Bild

Playm

RPG Studio Webmaster

  • Send private message

6

Thursday, April 16th 2015, 7:43pm

Wie Lycaon schon andeutet: Zeig mal Seite 2 des Events 006 - vielleicht gibt es da ein Problem.
Das was man sieht, sieht eigentlich richtig aus.

Probier auf jeden Fall mal Lycaons Vorschlag, da die Abfrage "Taste gedrückt" jedes Frame anschlägt, wenn die Taste gedrückt gehalten wird, während sein Codesnippet bei gedrückt gehaltener Taste nur einmal anschlägt. Alternativ kannst Du nach Schalterkontrolle A = ON testweise ein Wait von X Sekunden setzen, um dem Spieler die Zeit zu lassen die Taste loszulassen, bevor die Eventcodeverarbeitung wieder von Vorne losgeht.

7

Wednesday, April 22nd 2015, 9:45pm

Hat dir das weitergeholfen Svafa?
Bild

8

Friday, May 22nd 2015, 1:45pm

Vielen dank schon mal für eure Hilfe. Sie hat mir sehr weitergeholfen. :heart_full:

Ja, Lycaon hat recht was die zweite Seite betrifft und das lässt sich mit dem Code auch beheben. Nur leider reagiert er jetzt nicht jedes mal auf den Tastendruck.
Besonders wenn der Charakter nur rumsteht braucht es teilweise sehr viele Versuche bis er die Taste als gedrückt ansieht.

9

Friday, May 22nd 2015, 6:46pm

Dann poste doch bitte mal Screenshots von allen Eventseiten :) Den Fehler bekommen wir ganz schnell in den Griff.
Bild

10

Tuesday, May 26th 2015, 1:11am

Das sind die beiden Seiten des Events:
Spoiler
Bild
Bild
highlight to read


Im übrigen muss ich umbedigt anmerken das ihr absolut großartig seid. Es ist wirklich toll wie hilfsbereit ihr seid.

11

Tuesday, May 26th 2015, 1:29am

Das Event ist vollkommen korrekt; daran kann es nicht liegen. Auch wenn ich es nachbaue, funktioniert es einwandfrei. Welche anderen (Common-)Events sind auf der Map noch aktiv?
Bild

12

Thursday, May 28th 2015, 8:58pm

Das Problem habe ich selbst auf einer eventfreien Map. Leider kann ich auch gar kein Muster erkennen wann es Funktioniert und wann nicht deshalb tendiere ich im Moment dazu den Fehler auf meinen Rechner zu schieben und nicht auf das Event. Ich werde mal schauen das ich das ganze noch mal auf einem anderen Rechner ausprobiere.

Playm

RPG Studio Webmaster

  • Send private message

13

Thursday, May 28th 2015, 9:09pm

Da biete ich doch gerne meinen an. Wenn Du mal ein Demoprojekt hochlädst, indem Du das Problem nachgestellt hast (und bei dem der Fehler auftritt) teste ich gerne mal, ob es auf meinem Rechner anders läuft.
Es testen dann bestimmt noch ein paar andere mit und dann kriegst Du schnell die Info, ob es vielleicht am Rechner liegen kann.

Bex

Seher

Motto: Lets have some Fun.

  • Send private message

14

Friday, May 29th 2015, 2:24pm

Problem Vermutung:
Der Eventcode eines Paralelen Events wird im Ace nur circa alle 4 Frames ausgeführt.
Deshalb reagiert deine Taste ab und zu nicht.

Lösung:
Benutze das Eventcommand "Loop" (Schleife in Deutsch?)
Mache ein Eventcommand "Wait 1Frame" in den Loop.
Füge deinen Eventcode in den Loop unter dem Wait ein.

Hierdurch wird jeden Frame gefragt ob die Taste gedrückt wurde.

Playm

RPG Studio Webmaster

  • Send private message

15

Friday, May 29th 2015, 8:32pm

Der Eventcode eines Paralelen Events wird im Ace nur circa alle 4 Frames ausgeführt.

Huch, Du hast Recht Bex - der Eventcode eines parallelen Event wird nicht durchgehend erneut ausgeführt sondern wenn das Event einmal durchgelaufen ist entsteht eine Lücke von einem Frame, bis es wieder von vorne losgeht. [1]

Beschreibung des Problems für andere Skripter


Spoiler: Benötigtes Vorwissen

  • Sind Events parallele Prozesse, speichern sie in @interpreter einen eigenen Game_Interpreter
  • Events werden jedes Frame geupdatet
  • Im Game_Event#update wird der @interpreter jedes mal neu auf Anfang gesetzt, wenn er gerade nicht "läuft"

    Ruby Source code

    305
    
    @interpreter.setup(@list, @event.id) unless @interpreter.running?

  • Und anschließend einmal durchgespielt

    Ruby Source code

    306
    
    @interpreter.update

  • Ein Interpreter zählt als "läuft gerade", wenn er eine Fiberinstanz hat

    Ruby Source code

    109
    110
    111
    112
    113
    114
    
      #--------------------------------------------------------------------------
      # * Determine if Running
      #--------------------------------------------------------------------------
      def running?
        @fiber != nil
      end

  • Die Fiberinstanz tut nichts anderes als diese Methode aufzurufen:

    Ruby Source code

    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    
      #--------------------------------------------------------------------------
      # * Execute
      #--------------------------------------------------------------------------
      def run
        wait_for_message
        while @list[@index] do
          execute_command
          @index += 1
        end
        Fiber.yield
        @fiber = nil
      end

  • Man sollte die Fiberinstanz, so wie sie im Helpfile beschrieben ist, kennen
highlight to read

Der Fiberkontext wird verlassen (Zeile 106) und erst danach (Zeile 107) wird die Fiberinstanz auf nil gesetzt. Daraus folgt, das wenn der Interpreter einmal durchgelaufen ist, er nicht direkt verfällt sondern erst wenn erneut @interpreter.update aufgerufen (und damit Game_Interpreters @fiber.resume), @fiber auf nil gesetzt wird (beim Aufruf von @interpreter.update macht er in der Zeile nach Fiber.yield weiter) und erst dann kann bei erneutem Aufruf von Game_Event#update der @interpreter wieder auf Anfang gesetzt werden.



Spontan wüsste ich gerade nicht, warum sich der Ace so verhält. Vielleicht hat jemand anderes eine Idee dazu.

Edit zum Thema:
Bex Lösung stimmt. Wenn Du das Event nicht neustarten lässt, sondern es durchgehend einen Loop durchführt und via Wait:1 immer kurz pausiert, sollte das Event ohne Lücken jedes Frame seinen Code ausführen.


[1] Also nicht ca. alle 4 Frames Bex, sondern es vergehen meiner Ansicht nach ziemlich genau 1 Frame, bis das Event wieder von vorne losgeht.

16

Friday, May 29th 2015, 9:18pm

Oh, das erklärt auch, warum es bei mir funktioniert: Ich habe es im XP nachgebaut ;) Auf den ist eben Verlass :P
Bild

17

Saturday, June 6th 2015, 8:38pm

Danke für die viele Hilfe. Es lag tatsächlich an meinem Rechner auf dem der Maker offenbar etwas fehlerhaft läuft. Das mit dem einen (oder den vier) Frames hätte ich nie bemerkt, so schnell kann ich nicht tippen :).

Social bookmarks