Hilfe bei Spielfortschrittanzeige!!
Hey ihr,
ich brauche ganz dringend eure Hilfe. Mein Spiel für den RPG Maker XP ist so gut wie fertig. Ich will jetzt zum Schluss noch eine Spielfortschrittanzeige einbauen, die dem Spieler halt anzeigt, zu wie viel Prozent er das Spiel schon durchgespielt hat. Die Anzeige funktioniert soweit auch ganz gut. Allerdings gibt es ein sehr schwerwiegendes Problem:
Speichert man z.B. sein Spiel, beendet es und will dann später wieder weiterspielen, zeigt die Anzeige nicht mehr den bisherigen Spielfortschritt an. Dieser wird folglich nicht mit gespeichert. Ich hatte nun die Idee, den Spielfortschritt in einer Variable zu speichern und diese dann über das Script anstelle des Spielfortschritts anzuzeigen.
Und jetzt komme ich zu euch. Ich selbst kann überhaupt nicht scripten und wollte euch deswegen mal fragen, ob einer mir sagen kann, wie ich das bewerkstelligen kann.
Hier habt ihr einmal das Script:
#==============================================================================
# ** Window_Fortschritt
#------------------------------------------------------------------------------
# Zuerst einen Wert deklarieren bevor man das Spiel startet!
# Dieser Bildschirm zeigt den von dir bestimmten Spielfortschritt an.
#==============================================================================
class Window_Steps < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 96)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Fortschritt")
self.contents.font.color = normal_color
if !$fortschritt
self.contents.draw_text(4, 32, 120, 32, "???", 2)
elsif $fortschritt <= 150
self.contents.draw_text(4, 32, 120, 32, $fortschritt.to_s + "%", 2)
else
self.contents.draw_text(4, 32, 120, 32, "100 %", 2)
end
end
end
Im Anhang findet ihr ein Bild, wie es im Spiel aussieht.
Vor dem Prozentzeichen soll dann halt der Wert der Variable über das Script angezeigt werden. Ich hoffe das geht und jemande von euch weiß wie.
Vielen Dank schon mal
Alex
ich brauche ganz dringend eure Hilfe. Mein Spiel für den RPG Maker XP ist so gut wie fertig. Ich will jetzt zum Schluss noch eine Spielfortschrittanzeige einbauen, die dem Spieler halt anzeigt, zu wie viel Prozent er das Spiel schon durchgespielt hat. Die Anzeige funktioniert soweit auch ganz gut. Allerdings gibt es ein sehr schwerwiegendes Problem:
Speichert man z.B. sein Spiel, beendet es und will dann später wieder weiterspielen, zeigt die Anzeige nicht mehr den bisherigen Spielfortschritt an. Dieser wird folglich nicht mit gespeichert. Ich hatte nun die Idee, den Spielfortschritt in einer Variable zu speichern und diese dann über das Script anstelle des Spielfortschritts anzuzeigen.
Und jetzt komme ich zu euch. Ich selbst kann überhaupt nicht scripten und wollte euch deswegen mal fragen, ob einer mir sagen kann, wie ich das bewerkstelligen kann.
Hier habt ihr einmal das Script:
#==============================================================================
# ** Window_Fortschritt
#------------------------------------------------------------------------------
# Zuerst einen Wert deklarieren bevor man das Spiel startet!
# Dieser Bildschirm zeigt den von dir bestimmten Spielfortschritt an.
#==============================================================================
class Window_Steps < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 160, 96)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Fortschritt")
self.contents.font.color = normal_color
if !$fortschritt
self.contents.draw_text(4, 32, 120, 32, "???", 2)
elsif $fortschritt <= 150
self.contents.draw_text(4, 32, 120, 32, $fortschritt.to_s + "%", 2)
else
self.contents.draw_text(4, 32, 120, 32, "100 %", 2)
end
end
end
Im Anhang findet ihr ein Bild, wie es im Spiel aussieht.
Vor dem Prozentzeichen soll dann halt der Wert der Variable über das Script angezeigt werden. Ich hoffe das geht und jemande von euch weiß wie.

Vielen Dank schon mal
Alex
Benutzerinformationen überspringen
Ankömmling
Motto: Ich lass es mal sein mit dem Motto.. In mehreren Jahren guck ich hier drauf und denke, wie naiv ich doch früher gewesen bin... Edit: Mein Gott, bin ich naiv gewesen!
Das Problem ist, dass ich nicht weiß, wann genau "$fortschritt" in eine Variable gespeichert werden soll.
Also speichern kannst du Fortschritt z.B. in der Variable 1000 mit folgendem Skript: "$game_variables[1000] = $fortschritt"
(Einfach in Call-Script im Event aufrufen)
Das skript was du jetzt gezeigt hast wird nur aufgerufen, wenn das Menü aufgerufen wird.
Deshalb kannst du das speichern des Wertes nicht stumpf in das Skript schreiben.
Denn wenn der Spieler das Menü gar nicht öffnet, wird der Fortschritt auch nicht gespeichert.
Deshalb: Immer das Call-Script aufrufen, wann immer du $fortschritt änderst.
Also speichern kannst du Fortschritt z.B. in der Variable 1000 mit folgendem Skript: "$game_variables[1000] = $fortschritt"
(Einfach in Call-Script im Event aufrufen)
Das skript was du jetzt gezeigt hast wird nur aufgerufen, wenn das Menü aufgerufen wird.
Deshalb kannst du das speichern des Wertes nicht stumpf in das Skript schreiben.
Denn wenn der Spieler das Menü gar nicht öffnet, wird der Fortschritt auch nicht gespeichert.
Deshalb: Immer das Call-Script aufrufen, wann immer du $fortschritt änderst.
Es reicht wenn du $fortschritt in Scene_File einfach mit serialisierst. Sprich
bzw. zum laden
Ich habe keinen Maker zur Hand, aber im VX heißen die Methoden
Dort einfach den Schnipsel von oben einfügen.
|
|
Ruby Quellcode |
1 |
Marshal.dump($fortschritt, file) |
bzw. zum laden
|
|
Ruby Quellcode |
1 |
$fortschritt = Marshal.load(file) |
Ich habe keinen Maker zur Hand, aber im VX heißen die Methoden
|
|
Ruby Quellcode |
1 2 |
write_save_data(file) # bzw. read_save_data(file) |
Dort einfach den Schnipsel von oben einfügen.
Wenn du das ganze schon über eine einzige eigene globale Variable machen würdest, und es nicht abkapselts etc..., dann kannst du genauso gut statt $fortschritt auch $game_variables[X] für eine beliebige Game-Variable hernehmen. Bevor du das ganze extra speicherst, da wirst du nach ner Weile alt. Am besten wäre es ja noch so:
Und jetzt einfach mit $game_player.fortschritt abfragen/verändern, wird ebenso automatisch mitgespeichert. Motto: neue globale Variable nur anlegen wenn eine komplexe Klasse reinkommt, die nicht unbedingt in eine der Standardklassen passt, und generell so wenig wie möglich.
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 10 11 |
class Game_Player < Game_Character attr_accessor :fortschritt alias init_later initialize def initialize init_later @fortschritt = 0 end end |
Und jetzt einfach mit $game_player.fortschritt abfragen/verändern, wird ebenso automatisch mitgespeichert. Motto: neue globale Variable nur anlegen wenn eine komplexe Klasse reinkommt, die nicht unbedingt in eine der Standardklassen passt, und generell so wenig wie möglich.
Terranigma 2 - Episode I - Open Beta out now!
RPC - Rpg-Maker Community Platform - Spielübergreifende Erfolge und mehr!
RPC - Rpg-Maker Community Platform - Spielübergreifende Erfolge und mehr!
Antwort 1 u. 2 sind quark :/
The King hat Recht, das würde ich auch nehmen.
Allerdings ist der alias zu "initialize" nicht notwendig, da Game_Player keine initialize hat.
Zweitens ist der normale alias-Befehl Problematisch, wenn mehrere Instanzen aliasen wollen - wir kennen seine Skripts nicht.
Drittens kann der alias schief gehen, wenn er Skripte hat, die dem Teil Parameter verpassen.
Daher wäre - auf das letzte Bezogen, folgender Overwrite wohl am sinnvollsten:
Warum sind 1 & 2 quark?
@1: Das ist ein Anzeigefenster, das garkeine Werte halten darf, da es kein Businness besitzt. Dafür werden nur "Game"-Classes oder "Scene_"-Classes benutzt (und evtl. etwas wo ich vergessen habe).
Hierbei handelt es sich jedoch um ein View, und dies sollte "so dumm wie möglich" sein, weil da sucht keine Sau nen Berechnungsfehler o.ä. (außer Koordinaten u.ä.)
@2: a) geht es hier um den XP, b) sind neue Werte nicht einfach irgendwo sinnlos mit rein zu pushen.
Das schlägt fast immer fehl, wenn mehr als ein neuer Wert mit gespeichert werden sollen. Auch macht man damit alte Save-Files kaputt. Wenn du bestehende Objekte erweiterst, hast du nil-Instanzen, keinen direkten Absturz. nil-Instanzen kannst du per Code einfacher umgehen (sollte man es immer machen).
Neue Werte gehören also generell in die Game-Classes untergebracht, wenn es nirgends so recht rein paat, dann in Game_System.
Eine Ausnahme bilden komplexe neuheiten, wie Beispielsweiße irgendwelche Spielwerte, die mit allem nichts zu tun haben, allerdings auch keine einfachen System-Werte wie die aktuelle Text-Boxen-Einstellung sind.
The King hat Recht, das würde ich auch nehmen.
Allerdings ist der alias zu "initialize" nicht notwendig, da Game_Player keine initialize hat.
Zweitens ist der normale alias-Befehl Problematisch, wenn mehrere Instanzen aliasen wollen - wir kennen seine Skripts nicht.
Drittens kann der alias schief gehen, wenn er Skripte hat, die dem Teil Parameter verpassen.
Daher wäre - auf das letzte Bezogen, folgender Overwrite wohl am sinnvollsten:
|
|
Ruby Quellcode |
1 2 3 4 5 6 7 8 9 |
class Game_Player < Game_Character attr_accessor :fortschritt alias_method :init_later, :initialize def initialize(*args, &block) init_later(*args, &block) @fortschritt = 0 end end |
Warum sind 1 & 2 quark?
@1: Das ist ein Anzeigefenster, das garkeine Werte halten darf, da es kein Businness besitzt. Dafür werden nur "Game"-Classes oder "Scene_"-Classes benutzt (und evtl. etwas wo ich vergessen habe).
Hierbei handelt es sich jedoch um ein View, und dies sollte "so dumm wie möglich" sein, weil da sucht keine Sau nen Berechnungsfehler o.ä. (außer Koordinaten u.ä.)
@2: a) geht es hier um den XP, b) sind neue Werte nicht einfach irgendwo sinnlos mit rein zu pushen.
Das schlägt fast immer fehl, wenn mehr als ein neuer Wert mit gespeichert werden sollen. Auch macht man damit alte Save-Files kaputt. Wenn du bestehende Objekte erweiterst, hast du nil-Instanzen, keinen direkten Absturz. nil-Instanzen kannst du per Code einfacher umgehen (sollte man es immer machen).
Neue Werte gehören also generell in die Game-Classes untergebracht, wenn es nirgends so recht rein paat, dann in Game_System.
Eine Ausnahme bilden komplexe neuheiten, wie Beispielsweiße irgendwelche Spielwerte, die mit allem nichts zu tun haben, allerdings auch keine einfachen System-Werte wie die aktuelle Text-Boxen-Einstellung sind.

-
Hallo
Tabs klicken unso, ne? -
Lyric
Meine schwarze Liste, beginnt mit einem Satz:
"Wer zuletzt lacht, lacht am besten!", und am Ende ist noch Platz.
Auf der Liste meiner Feinde, ist auch für euch noch Platz
Wer zuletzt lacht, lacht am besten!
Merkt euch diesen Satz!
Ode an die Feindschaft von Saltatio Mortis
-
Outtakes
-
Nummer 3
20.09.2012 - 19:46
"Yah, ich bin ihre Motivazin." "Motivazin - gibts das jetzt in der Apotheke rezeptflichtig?" -
Ich mag Kekse
-
Nummer 2
08.09.2012 - 01:29 Uhr
"Die Erlebnismacher zu Hannovre - Exlibre - ääääh... Excalibur"
*Lachflash* -
Nummer 1
07.09.2012 - 22:58 Uhr
*Bööarps* - Die Erlebnismacher zu Hannovre - Excalibur... "Mahlzeit... also... doch nicht Mahlzeit... war nur die Website"
"Ich hab gerülpst -.-" "Du hast was?" *LACHFLASH*
"Nicht dein Ernst, oder?" "DOCH!" *LACHFLASH second tour*
-
-
Profile

-
Ich
Dass bin ich:
Maker: RPG-XP, RPG-VX
Story:
Für andere mehr als für mich: 60%
Grafik:
Ich werde besser: 35%
Pixeln:
Ich stehe an den Anfängen: 7%
Mapping:
Es fehlen nur noch (alle) Feinheiten: 67%
Scripting:
Informatiker, mittlerweile auch andere Sachen am skripten: 93% -
Neues aus der SB
Neues aus der SB:
(03:41:36) Kagurame: n8 du
(03:41:37) Irrlicht: Nacht Mozilla
(03:41:47) MozillaBabybird: Kagu: der witz war flach
(03:42:01) Kagurame: welcher witz?
(03:42:14) Heatra: geh nicht benji
(03:42:21) Heatra: spiel lieber ats2
(03:42:25) MozillaBabybird: nacht leute ^^ ijemand sollte diesen verlauf im studio bash posten, damit die mal wissen wer die echten camper hier sind
(03:42:35) Kagurame: ich bin scripten
(03:42:3
MozillaBabybird: Heat: tut mir sorry xD
(03:42:40) Kagurame: ich mach das...^^
(03:42:4
MozillaBabybird: bis .... mittag ?
(03:42:49) Heatra: ^^
(03:42:55) MozillaBabybird: ja mittag dürfte passen
(03:42:56) MozillaBabybird:
(03:42:57) Kagurame: ^^
(03:43:02) Heatra: ich steh morgen eh erst um 5 uhr mittags auf
(03:43:07) Kagurame: bis heute
(03:43:11) Steve: MozillaBabybird verlässt den Chat.
(03:43:15) Kagurame: ich so um 3zum Lesen den Text mit der Maus markieren
(03:05:32) Ankou: bist du dir SICHER, dass es die Performance an der Stelle kritisch ist und c.a. 30% sind KEIN großer Unterschied?
(03:05:41) Ankou: oh
(03:05:45) Ankou: okay
(03:06:21) Asandril: Oh Ha was habt Ihr gerade für ein Thema?
(03:06:41) Ankou: das ist in der Tat eine performancekritische angelegenheit, aber ich denke dennoch nicht, dass das die Dinge sind auf die du dein Hauptaugenmerk richten solltest.
(03:07:01) Heatra: maschine
(03:07:01) Ankou: derartige Mikrooptimierungen werden Performanceprobleme sogut wie niemals beseitigen können
(03:07:01) Irrlicht: anhand der Tatsache dass es 20 000 000 Durchläufe waren nicht wirklich :-/
(03:07:0
Ankou: änder was konzeptionelles oder lass es bleiben.
(03:07:31) Ankou: evtl. kannst du mehr der Interpretation nach vorne verlagern
(03:08:06) Ankou: aber solche Dinge zu versuchen wie die case Abfragen durch send zu ersetzen in der Hoffnung ein paar Prozent einzusparen bringens dir nicht
(03:08:26) Asandril: Bin ich gerade hier in einem Kurs gelandet ..
(03:08:36) Irrlicht: hatte mal in Erwägung gezogen die Befehle evtl. schonmal etwas "vorzuinterpretieren", aber das dürfte dann mehr Speicher verbrauchen als es Geschwindigkeit bringt...
(03:09:11) Ankou: Asandril: ja, erstaunlich, angetrunken an Silvester über so etwas zu reden
(03:09:2
Heatra: -> lampenfieber
(03:09:40) Asandril: Kann ich nur beipflichten.
(03:09:46) Irrlicht: atm bin ich mir nicht sicher was genau den doch vergleichsweise erheblichen Lag von Parallel-Process-Events verursacht (oder ob es einfach an der gesammten Masse liegt) wenn ich bei 2 000 000 solcher Durchläufe unter einer Sek. bleibe...
(03:09:57) Ankou: Irrlicht: das ist durchaus üblich. Speicher gegen Geschwindigkeit einzustauschen ist sehr populär und bringt oft viel
(03:11:23) Irrlicht: mal schaun
zum Lesen den Text mit der Maus markieren
(03:32:35) (Kagurame_AnkündigungImForumMach): es da ne methode wie beim xp?
(03:32:4
Irrlicht: Cache.system("Iconset")
bekommst das Iconset
(03:32:50) (Kagurame_AnkündigungImForumMach): brauche es dringend, aber nix gefunden bisher
(03:33:01) (Kagurame_AnkündigungImForumMach): und dann per id?
(03:33:06) (Kagurame_AnkündigungImForumMach): drauf zugreifen?
(03:33:07) Irrlicht: Index berechnet sich einfach aus
x = index % 16
y = index / 16
(03:33:17) Irrlicht: afaik warens 16 nebeneinander^^
(03:33:2
(Kagurame_AnkündigungImForumMach): ok, danke.
(03:33:51) (Kagurame_AnkündigungImForumMach): ich glaub ich scripte dann noch ein bissl
(03:34:01) Steve: (Kagurame_AnkündigungImForumMach) heißt jetzt Kagurame.
(03:34:04) Irrlicht: im XP hast die einzelnen Icons anhand des Namens aus dem Icon-Ordner aufgerufen
(03:34:09) Steve: Kagurame ist nun Scripten!
(03:34:17) Irrlicht: (geht natürlich im VX auch, aber wozu gibts das Iconset)
(03:34:23) Kagurame: ja ich weis, daher war ich heut mittag verwirrtzum Lesen den Text mit der Maus markieren
Ähnliche Themen
-
Skript-Anfragen »-
eigenes Menü erstellen
(22. Juni 2013, 17:55)
-
Computer & Technik »-
Youtube funktioniert nicht mehr
(11. März 2010, 19:21)
-
Maker-Talk »-
Fehler beim Starten des Rpg- Makers Xp.
(22. Januar 2009, 18:10)
-
RGSS 1 Probleme & Talk »-
Events im Quadrat
(14. Dezember 2008, 14:16)
-
Maker-Talk »-
Zum 30 Tage Free Trail!!
(17. März 2008, 13:10)
