Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler bei 2mal Menü öffnen
Fir3bird
09.07.2008, 18:25
Öffne ich das erste mal das Spielmenü, ist noch alles OK. Aber wenn ich es schließe und wieder öffne, stürtzt das Spiel ohne Fehlermeldung ab.
Ich benutze ein leicht abgeändertes Menü, dass transparent ist und weitere Scripe wie AMSR, ein Wetterscript und ein Script, das das Spiel im Vollbildmodus startet.
MagicMagor
09.07.2008, 18:28
Dann poste mal den Code des veränderten Menü, daran wird es am ehesten liegen. Ganz ohne Fehlermeldung ist aber seltsam. Kommt eventuell eine Meldung von Windows ala "Game.exe hat einen Fehler verursacht und muss beendet werden"? Die deutet dann nämlich eher auf eine korrupte RGSS-DLL hin.
Aber sonst kann man ohne Code erstmal wenig sagen.
Fir3bird
09.07.2008, 18:51
Viel anders ist da nicht, eigentlich nur zwei Zeilen:
@sprite = Spriteset_Map.new #shows the map behind the menu
s1 = "Gegenstände"
s2 = "Techniken"
s3 = "Ausrüstung"
s4 = "Status"
s5 = "Speichern"
s6 = "beenden"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.back_opacity = 160
Die Transparenz ist auch bei zB dem Item-Menü.
Nein, auch die Meldung kommt nicht. Das Spiel wird beendet, aber, falls es dich interessiert, es gibt Probleme mit der Auflösung: Es wird vom Desktop nur das Viertel oben links korrekt angezeigt.
EDIT:
Antwort war aber extrem schnell ^^
MagicMagor
09.07.2008, 19:20
Ok, dann scheint das Vollbildskript Kanidat dafür zu sein.
Hast du mal versucht ein anderes Projekt manuell per Alt+Enter in den Vollbildmodus zu schalten?
Fir3bird
10.07.2008, 13:02
Nein, bringt leider nichts. Dafür kommt aber die berühmte Meldung: "...hat ein Problem festgestellt und..."
Ich probier grad mal die Transparenz auszuschalten...
EDIT:
Ok, es funktioniert nur, wenn ich die Map nicht im Hintergrund anzeigen lasse. Aber trotzdem will ich eine Möglichkeit, dass dies funktioniert.
MagicMagor
10.07.2008, 13:25
Also ich habe momentan 2 Vermutungen woran es liegen könnte:
1. Vermutung
Für dein verändertes Menü wird ja die Map im Hintergrund angezeigt, dafür wird ein Sprite-objekt erstellt, durch diese Zeile:
@sprite = Spriteset_Map.new
Eventuell wird dieses Sprite beim Verlassen des Menü nicht korrekt gelöscht, wodurch es beim zweiten Aufruf des Menüs zu Problem kommt.
Du solltest folgende Zeile in deinem Menüskript finden:
@sprite.dispose
Und zwar im unteren Bereich der main-Methode. Dort sollten auch die Window-Objekte disposet werden.
2. Vermutung
Irgendwo in dem Mapskript steckt der Fehler. Sollte also erstere Vermutung nicht zutreffen, poste bitte den GESAMTEN Code von "Spriteset_Map".
Fir3bird
10.07.2008, 14:43
Danke, jetzt funktioniert es. Ich habe tatsächlich vergessen, das Sprite zu löschen.
EDIT:
Verdammt, wär auch zu schön gewesen. Wenn ich zB ins ItemMenü gehe, und dann das Menü schließe (!), passiert dasselbe.
Ich habe die Code-Zeile bei Scene_Menu bei Input B eingefügt, ist das falsch?
EDIT:
Ich hab gerade probiert, es da hinzuschreiben, wo du es gesagt hast, aber nichts ändert sich.
Hier der Code "Scene_Menu"
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
$show_status = true
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# コマンドウィンドウを作成
@sprite = Spriteset_Map.new #shows the map behind the menu
s1 = "Gegenstände"
s2 = "Techniken"
s3 = "Ausrüstung"
s4 = "Status"
s5 = "Speichern"
s7 = "Gegneranalyse"
s6 = "beenden"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.back_opacity = 160
# パーティ人数が 0 人の場合
if $game_party.actors.size == 0
# アイテム、スキル、装備、ステータスを無効化
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
# セーブ禁止の場合
if $game_system.save_disabled
# セーブを無効にする
@command_window.disable_item(4)
end
# プレイ時間ウィンドウを作成
#@playtime_window = Window_PlayTime.new
#@playtime_window.x = 0
#@playtime_window.y = 224
# 歩数ウィンドウを作成
#@steps_window = Window_Steps.new
#@steps_window.x = 0
#@steps_window.y = 320
# ゴールドウィンドウを作成
#@gold_window = Window_Gold.new
#@gold_window.x = 0
#@gold_window.y = 416
# ステータスウィンドウを作成
if $show_status = true
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
@status_window.back_opacity = 160
end
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@command_window.dispose
#@playtime_window.dispose
#@steps_window.dispose
#@gold_window.dispose
@spriteset.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
#@playtime_window.update
#@steps_window.update
#@gold_window.update
if $show_status = true
@status_window.update
end
# コマンドウィンドウがアクティブの場合: update_command を呼ぶ
if @command_window.active
update_command
return
end
# ステータスウィンドウがアクティブの場合: update_status を呼ぶ
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# パーティ人数が 0 人で、セーブ、ゲーム終了以外のコマンドの場合
if $game_party.actors.size == 0 and @command_window.index < 4
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 0 # アイテム
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# アイテム画面に切り替え
$scene = Scene_Item.new
when 1 # スキル
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # 装備
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # ステータス
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # セーブ
# セーブ禁止の場合
if $game_system.save_disabled
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# セーブ画面に切り替え
$scene = Scene_Save.new
when 5 # ゲーム終了
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ゲーム終了画面に切り替え
$scene = Scene_End.new
when 6
$scene = Scene_Beastairy.new
end
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_status
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# コマンドウィンドウをアクティブにする
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 1 # スキル
# このアクターの行動制限が 2 以上の場合
if $game_party.actors[@status_window.index].restriction >= 2
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# スキル画面に切り替え
$scene = Scene_Skill.new(@status_window.index)
when 2 # 装備
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 装備画面に切り替え
$scene = Scene_Equip.new(@status_window.index)
when 3 # ステータス
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス画面に切り替え
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
Bei "Spriteset_Map" hab ich nichts verändert.
Fir3bird
10.07.2008, 15:15
OK, jetzt scheints wirklich zu funtionieren, ich hab mich einfach nur vertippt>_< >_< >_<
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.