Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • »Monkey Guardian« ist der Autor dieses Themas

Motto: So lasset uns kein Trübsal sinnieren und gar königlich dinieren!

  • Nachricht senden

1

Samstag, 27. Juli 2013, 15:04

Wechseln von Comment zu Event Name

Ich habe hier das folgende kleine Problemchen:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Game_Event < Game_Character
 
  attr_reader :id
 
  def check_value(comment)
    return 0 if @list.nil? or @list.size <= 0
    for item in @list
      if item.code == 108 or item.code == 408
        if item.parameters[0] =~ /#{comment} (\d+)/
          return $1.to_i
        end
      end
    end
    return 0
  end

Ich würde gerne diese kleine Methode so umschreiben, dass er nicht mehr den Comment im Event liest, sondern den Eventnamen und trotzdem noch die Werte, die hinter dem Namen stehen erkennt.

So wird das ganze verarbeitet:

Ruby Quellcode

1
@enemy_id = check_value("Enemy")


Ich habe es nicht hinbekommen, es zu ändern, auch wenn es vielleicht sehr leicht ist.
Würde mich über die Lösung freuen! :D
  • :cake: So lasset uns beginnen! :new:

    • Ein Abenteuer, wie du es noch nie erlebt hast!
      Tauche ein in die wunderbare Welt des Königs und erlebe auf deiner Reise die verrücktesten Dinge!
      NICHT MEHR LANGE! :navigation-right: Hier gibt es weitere Informationen! :navigation-left:
    • Jetzt die Demo herunterladen!
      Bild
      Euch erwartet eine Welt, wie sie nur ein exzentrischer König veralbern könnte...
    • Titelbild
      Bild
  • :fires: XBOX 360 Bild

    Bild
  • :new: Avatar im Großformat

    Bild

2

Samstag, 27. Juli 2013, 21:26

In der Variable @list sind die aktuellen Event Commands gespeichert1. In Zeile 7 bis 13 durchsuchst Du diese Liste nach Comments und wenn ein bestimmter Teilstring gefunden wird, filtert er dir eine Zahl raus und gibt diese zurück.
Den Namen der dem Event im Editor gegeben wurde, findest Du in @event.name 2
Du kannst den Block indem Du die EventCommandListe durchsuchst also auf die eine Zeile kürzen, in der Du (nur) den Namen durchsuchst.

Ruby Quellcode

1
2
3
4
  def check_value(comment)
    return $1.to_i if @event.name =~ /#{comment} (\d+)/
    return 0
  end

_____________________
1 Siehe dazu auch: Wie funktionieren Events? - Scientia
2 RPG::Event - Scientia

  • »Monkey Guardian« ist der Autor dieses Themas

Motto: So lasset uns kein Trübsal sinnieren und gar königlich dinieren!

  • Nachricht senden

3

Sonntag, 28. Juli 2013, 16:27

Das funktioniert auf jeden Fall schon mal, danke!
Der Grund, warum ich das ändern wollte, war, dass Comments in Events viele Durchläufe durch die Eventpage erfordern, um diese Comments rauszufiltern.
Sehe ich das richtig?
Ist es so gesehen möglich, sich die Methode so zu schreiben, dass sie nur die ersten paar Zeilen in der Eventpage durchschaut (solange Comments vorhanden sind) und abbricht, sobald kein Comment mehr in der nächsten Zeile auftaucht?
D.h. alle Comments, die ein Event braucht, müssen ganz oben stehen.
Würde das die Leistung verbessern?
Ich bin mir eigtl. fast sicher, dass solche "Untersuchungen" auf der Eventpage z.B. Lags verursachen.

Anders ausgedrückt:
Mit dem

Ruby Quellcode

1
attr_reader   :list
die ersten Zeilen so lange lesen, bis kein Comment mehr vorkommt.
  • :cake: So lasset uns beginnen! :new:

    • Ein Abenteuer, wie du es noch nie erlebt hast!
      Tauche ein in die wunderbare Welt des Königs und erlebe auf deiner Reise die verrücktesten Dinge!
      NICHT MEHR LANGE! :navigation-right: Hier gibt es weitere Informationen! :navigation-left:
    • Jetzt die Demo herunterladen!
      Bild
      Euch erwartet eine Welt, wie sie nur ein exzentrischer König veralbern könnte...
    • Titelbild
      Bild
  • :fires: XBOX 360 Bild

    Bild
  • :new: Avatar im Großformat

    Bild

  • »Monkey Guardian« ist der Autor dieses Themas

Motto: So lasset uns kein Trübsal sinnieren und gar königlich dinieren!

  • Nachricht senden

4

Montag, 29. Juli 2013, 12:52

Oder ganz einfach wäre es wohl zu sagen, dass die for-Schleife in der Methode

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
  def check_value(comment)
    return 0 if @list.nil? or @list.size <= 0
    for item in @list
      if item.code == 108 or item.code == 408
        if item.parameters[0] =~ /#{comment} (\d+)/
          return $1.to_i
        end
      end
    end
    return 0
  end

einfach nur z.B. 5 Durchgänge macht und nicht so lange, wie items in @list sind.
Allerdings bräuchte ich Hilfe beim Umschreiben.

Der Nachteil wäre dann einfach nur, dass die Comments ganz oben stehen müssen und nicht mehr als 5 sein dürfen (oder 4, je nachdem mit welchem Index die Liste beginnt).
  • :cake: So lasset uns beginnen! :new:

    • Ein Abenteuer, wie du es noch nie erlebt hast!
      Tauche ein in die wunderbare Welt des Königs und erlebe auf deiner Reise die verrücktesten Dinge!
      NICHT MEHR LANGE! :navigation-right: Hier gibt es weitere Informationen! :navigation-left:
    • Jetzt die Demo herunterladen!
      Bild
      Euch erwartet eine Welt, wie sie nur ein exzentrischer König veralbern könnte...
    • Titelbild
      Bild
  • :fires: XBOX 360 Bild

    Bild
  • :new: Avatar im Großformat

    Bild

5

Mittwoch, 31. Juli 2013, 00:06

Beides ist kein Problem.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
  def check_value(comment)
    return 0 if @list.nil? or @list.size <= 0
    for item in @list
      if item.code == 108 or item.code == 408
        if item.parameters[0] =~ /#{comment} (\d+)/
          return $1.to_i
        end
      else # Wenn das EventCommand kein Kommentar ist, breche den Schleifendurchlauf ab
        break
      end
    end
    return 0
  end


Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  def check_value(comment)
    return 0 if @list.nil? or @list.size <= 0
    # Prüfe die ersten fünf Elemente in der Liste
    # benutze dafür die Methode +times+ sowie den ternären Operator
    (@list.size < 5 ? @list.size : 5).times{ |i|
      item = @list[i]
      if item.code == 108 or item.code == 408
        if item.parameters[0] =~ /#{comment} (\d+)/
          return $1.to_i
        end
      end
    }
    return 0
  end


Das dies aber eine große Leistungsverbesserung bringt glaube ich nicht.

_____________________
ruby-doc.org - Die Methode times für Integer
Ternärer Operator- Scientia

  • »Monkey Guardian« ist der Autor dieses Themas

Motto: So lasset uns kein Trübsal sinnieren und gar königlich dinieren!

  • Nachricht senden

6

Mittwoch, 31. Juli 2013, 11:22

Das Erste ist so leicht, da hätte ich eigtl. auch selbst drauf kommen können. Ich habe da etwas komplizierter gedacht! :lol:
Danke, es funktioniert einwandfrei und die FPS liegen nun dauerhaft auf 57-60. Vorher waren es um die 15.
Anscheinend lag ich richtig, dass die Listen das Problem waren.
Hat z.B. ein Event über 100 Commands, kann das schon problematisch werden.
  • :cake: So lasset uns beginnen! :new:

    • Ein Abenteuer, wie du es noch nie erlebt hast!
      Tauche ein in die wunderbare Welt des Königs und erlebe auf deiner Reise die verrücktesten Dinge!
      NICHT MEHR LANGE! :navigation-right: Hier gibt es weitere Informationen! :navigation-left:
    • Jetzt die Demo herunterladen!
      Bild
      Euch erwartet eine Welt, wie sie nur ein exzentrischer König veralbern könnte...
    • Titelbild
      Bild
  • :fires: XBOX 360 Bild

    Bild
  • :new: Avatar im Großformat

    Bild

Social Bookmarks