• Anmelden

1

Dienstag, 25. Juni 2013, 22:00

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. :D

Vielen Dank schon mal

Alex
»Cheatsandmore« hat folgendes Bild angehängt:
  • Spielfortschritt.jpg

Voudisteppi2

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!

  • Nachricht senden

2

Donnerstag, 27. Juni 2013, 09:42

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.

3

Donnerstag, 27. Juni 2013, 14:38

Es reicht wenn du $fortschritt in Scene_File einfach mit serialisierst. Sprich


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.

4

Donnerstag, 27. Juni 2013, 14:48

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:

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!

Kagu-chan

Alopex Lagopus

Motto: Ich Böse, Du Teufel

  • Nachricht senden

5

Donnerstag, 27. Juni 2013, 21:53

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:

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.
Bild

  • 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

    Bild
  • 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:

    Spoiler: Die Camper
    (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 :D
    (03:42:25) MozillaBabybird: nacht leute ^^ ijemand sollte diesen verlauf im studio bash posten, damit die mal wissen wer die echten camper hier sind :D
    (03:42:35) Kagurame: ich bin scripten
    (03:42:38) MozillaBabybird: Heat: tut mir sorry xD
    (03:42:40) Kagurame: ich mach das...^^
    (03:42:48) MozillaBabybird: bis .... mittag ?
    (03:42:49) Heatra: ^^
    (03:42:55) MozillaBabybird: ja mittag dürfte passen
    (03:42:56) MozillaBabybird: :D
    (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 3
    zum Lesen den Text mit der Maus markieren


    Spoiler: Die Informatiker vom Dienst
    (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:08) 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:28) 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


    Spoiler: Auch noch später^^
    (03:32:35) (Kagurame_AnkündigungImForumMach): es da ne methode wie beim xp?
    (03:32:48) 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:28) (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 verwirrt
    zum Lesen den Text mit der Maus markieren

Ähnliche Themen

Verwendete Tags

Anzeige, Hilfe, Spielfortschritt, Variable

Social Bookmarks