PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3 kleinere Probleme



Fierce Deity
25.05.2008, 18:03
Hallo :)

Ich habe früher schon ein paar Projekte mit dem RM XP angefangen, und will jetz auch wieder ein wenig basteln. Mit der Zeit hab ich aber ne Menge vergessen, und so tun sich folgende Fragen auf:

Ich habe das Titelmenu überspringen lassen, um mein eigenes Titelmenu zu erzeugen, dass da eine Art animierten Hintergrund bereitstellt.

Als erstes poste ich mal meinen Code und stelle danach die Fragen dazu.

http://img79.imageshack.us/img79/3554/codehg9.png

Das ganze läuft als Autostartprozess.

Im Fall "Fortsetzen" will ich, wie ihr vlt. erahnt, das Load Menu öffnen, aber dazu finde ich im Eventkatalog keinen Befehl. Ich finde zwar Open Save Screen, aber das bringt ja herzlich wenig.

Im Fall "Ende" will ich das Spiel beenden lassen, und zum Betriebssystem zurückkehren - auch hier habe ich keine Ahnung wie ich das anstellen soll.

Ich will in jedem Fall auf das Standart Menü verzichten.

Edit:
... und das dritte Problem, das hat sich eben schon erledigt.

Danke für Eure Hilfe,

FD

sorata08
25.05.2008, 18:15
Ich würde dir empfehlen, das Event auf Parallel Process zu stellen
Menü kannst du ja per Eventbefehl an- und ausstellen.

Zum Lademenü aufrufen:

$scene = Scene_Load.new

im Scriptaufruf-Befehl angeben (3.Seite Eventbefehle, rechte Spalte, letzer Befehl)

Zum Beenden: Das gleiche, bloß

$game_system.se_play($data_system.decision_se)
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
$scene = nil

einfügen.^^

~Sorata

Fierce Deity
25.05.2008, 18:25
Danke für deine Hilfe,
das Problem ist gelöst ^^

Beim Beenden erzählt er zwar etwas von einer undefinierten Methode "on se"... aber das Programm ist beendet.

FD

Ascare
25.05.2008, 18:28
Einfach nur
$scene = nil zum beenden reicht auch.

Fierce Deity
26.05.2008, 21:05
Es hat sich noch ein Problem gefunden, für das ich aber keinen neuen Thread aufmachn will.
Da ich auf das Standart-Menu verzichten will (das, welches durch Escape gerufen wird), habe ich mir ein eigenes kleines gebastelt. Wenn ich jetzt den Item Bildschirm aufrufe, und dann mit Escape abbreche, komme ich aber wieder zurück in das Standart-Menu.

Wo muss ich was wie verändern, um nach Abbruch des Item Bildschirm einfach wieder zur Map zurückzukehren?

Ascare
26.05.2008, 23:56
Müsste im Script Editor Scene_Item sein. Dort in der Zeile ~71 einfach in Scene_Map.new ändern. Ob dadurch irgendwelche Probleme entstehen kann ich jetzt nicht sagen, habe mir das nicht genau angeguckt. Einfach mal ausprobieren.

Übrigens, das gleiche gilt auch beim Ladebildschirm. Wenn man den abbricht, landet man im Titelscreen. Also auch dort angeben wo man landen soll, wenn man abbricht.

SMWma
18.06.2008, 13:35
kann es sein, das du ein Menu als Karte hast???
Bei mir war es so, aber die Events sind dann immer an ihrer alten Stelle...
Und du hast bestimmt auch eine Karte als Titel.
Ich hab es zwar auch so, aber lösch mal im Datei-Ordner alle Datein namens
"saveX". Wenn du das Spiel startest und dan das Lademenu öffnen willst
geht es ja auch...
Doch dort sind keine Ladbaren Datein.
Wie umgingst du dieses Problem???

schmoggi
18.06.2008, 13:57
Müsste im Script Editor Scene_Item sein. Dort in der Zeile ~71 einfach in Scene_Map.new ändern. Ob dadurch irgendwelche Probleme entstehen kann ich jetzt nicht sagen, habe mir das nicht genau angeguckt. Einfach mal ausprobieren.


Gibt keine Probs damit, völlig richtig!

Aber schön mit Kommentaren versehen (am besten mit nem stichwort, damit man es mit der suche sofort finden kann), damit man weiß was geändert wurde ... oder am besten gleich ne kopie von der ori Scene erstellen.

Wegen dem Beenden nochmal ... wenns ganz einfach sein soll:

Ein einfaches "exit" geht auch ;).

greetz

-KD-
18.06.2008, 15:39
Da solche Fragen öfters kommen, hab ich auch noch ein Script von einer früheren Anfrage parat:

#===============================================================
# ** Game_Save (Modul)
#---------------------------------------------------------------
# Speichert Spieldaten ab und lädt diese wieder.
#===============================================================
module Game_Save
FILENAME = "./save" #Dateiname für Spielstand
FILE_EXTENSION = ".rxdata"
#Modul kann in Klassen als mixin eingefügt werden um verschiedene
#Save-Klassen (Autosave, Schnellspeichern, ...) zu definieren
module_function()
#---------------------------------------------------------------
# * save :: (filename :: String || Numeric)
# Wird aufgerufen um Spielstand in Datei filename zu speichern
#---------------------------------------------------------------
def save(filename=FILENAME+FILE_EXTENSION)
filename = make_filename(filename) if filename.kind_of?(Numeric)
before_save()
File.open(filename, "wb") {|output|
saved_objects.each {|obj|
Marshal.dump(obj, output)
}
}
after_save()
end
#---------------------------------------------------------------
# * load :: (filename :: String || Numeric)
# Wird aufgerufen um Spielstand in Datei filename zu laden
#---------------------------------------------------------------
def load(filename=FILENAME)
filename = make_filename(filename) if filename.kind_of?(Numeric)
before_load()
obj=[]
File.open(filename, "rb") {|input|
until input.eof? do
obj << Marshal.load(input)
end
}
loaded_objects(*obj)
after_load()
end
#---------------------------------------------------------------
# * saved_objects :: () -> Array
# Enthält eine Liste aller abzuspeichernden Objekte
# Alle Elemente müssen per Marshal#dump speicherbar sein
# um Liste zu erweitern aliase die Methode und erweitere den Array
#---------------------------------------------------------------
def saved_objects()
[
$game_party.actors.collect {|a| [a.character_name, a.character_hue]},
$game_system,
$game_switches,
$game_variables,
$game_self_switches,
$game_screen,
$game_actors,
$game_party,
$game_troop,
$game_map,
$game_player
]
end
#---------------------------------------------------------------
# * loaded_objects :: (args :: Array)
# Enthält eine Zuweisung der geladenen Objekte zu Variablen
# Kann per aliasing erweitert werden
#---------------------------------------------------------------
def loaded_objects(*args)
chars, $game_system, $game_switches, $game_variables,
$game_self_switches, $game_screen, $game_actors, $game_party, $game_troop,
$game_map, $game_player = *args
end
#---------------------------------------------------------------
# * before_save, before_load
# Wird aufgerufen, bevor Spielstand gespeichert/geladen wird
#---------------------------------------------------------------
def before_save
$game_system.magic_number = $data_system.magic_number
$game_system.save_count += 1
end
def before_load
#do nothing
end
#---------------------------------------------------------------
# * after_save, after_load
# Wird aufgerufen, nachdem Spielstand gespeichert/geladen wird
#---------------------------------------------------------------
def after_save
#do nothing
end
def after_load
#Wenn Map geändert wurde, lade Map neu
if $game_system.magic_number != $data_system.magic_number then
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
#Aktualisiere Spieldaten und starte die Map-Szene
$game_party.refresh()
$game_map.update
$scene = Scene_Map.new()
end
#---------------------------------------------------------------
# * make_filename :: (n :: Numeric) -> String
# erzeugt einen standardmäßigen Dateinamen mit einer Nummer
#---------------------------------------------------------------
def make_filename(n)
FILENAME + filename.to_s + FILE_EXTENSION
end
end
#===============================================================
# ** Game_Start (Modul)
#---------------------------------------------------------------
# Initialisiert Spieldaten
#===============================================================
module Game_Start
# Alle Methoden dürfen auch als Singletonmethoden ausgeführt werden
module_function()
#--------------------------------------------------------------------------
# * Öffne alle Dateien aus der Database und speichere ihren Inhalt
#--------------------------------------------------------------------------
def load_database
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
end
#--------------------------------------------------------------------------
# * Initialisiere die Elemente des Spiels
#--------------------------------------------------------------------------
def initialize_global_variables
Graphics.frame_count = 0 #Resete Spielzeit
# Erstelle die globalen Variablen
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
end
#--------------------------------------------------------------------------
# * Initialisiere die Heldentruppe und starte das Spiel
#--------------------------------------------------------------------------
def start_game
# Initialisiere die Heldentruppe
$game_party.setup_starting_members
# Starte die Anfangsmap
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
# Starte Spiel
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Wenn per Testkampf gestartet wird, starte Kampf
#--------------------------------------------------------------------------
def start_battle
#Initialisiere Heldentruppe des Testkampfes
$game_party.setup_battle_test_members
# Einstellungen des Testkampfes
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# Musik abspielen
$game_system.se_play($data_system.battle_start_se)
$game_system.bgm_play($game_system.battle_bgm)
# Starte Kampf
$scene = Scene_Battle.new
end

def start
self.load_database
self.initialize_global_variables
if $BTEST then self.start_battle else self.start_game end
end
end
#===============================================================
# ** Scene_Title (Klasse)
#---------------------------------------------------------------
# Überspringt Titel und lädt sofort Spielstand
#===============================================================
class << Scene_Title
include Game_Start
def new()
start #Gib aktuelle Szene (Map) zurück
end
end

Einfach in Scripteditor einfügen. Startmenü wird automatisch übersprungen. Mit dem "Script..." Befehl stehen dir zusätzlich diese Möglichkeiten zur Verfügung:

Game_Save.save(1) #=> speichert Spielstand auf Slot 1
Game_Save.load(1) #=> Lädt Spielstand auf diesen Slot wieder
Womit du nicht mehr auf das Speicher/Lade-Menü angewiesen bist, falls du das ebenfalls neu machen möchtest.

SMWma
18.06.2008, 20:39
das meinte ich nicht(oder doch???;) )
Aber egal:( :( :(
Ich kann das verkraften:>:( >:( >:(
___
Warum versteht mich niemand???>:( :confused: >:(
Ich habe es nicht so gemeint.
Man kann bei mir den alten Laadebildschirm ohne eine Save_Datei zu haben!!!
Lesen, du ...http://www.multimediaxis.de/images/smilies/old/s_009.gif http://www.multimediaxis.de/images/smilies/old/s_009.gif http://www.multimediaxis.de/images/smilies/old/s_009.gif
(italenischer Akzent)