game.loading do |loader|
loader.add :window, :system => "window"
loader.add :gui_item, :system => "gui_item"
end
game.on_init do
set_window_image :window
set_gui_image :gui_item
scene_change :start_scene
end
scene :start_scene do |scene|
scene.loading do |loader|
loader.load_data :game_data, "savedata", :scope => :private
end
scene.on_init do
speak("セーブ・ロードのサンプルです")
speak("ロード結果:#{game.loaded_data_result[:game_data]}")
speak("前回の保存データ:#{game.loaded_data[:game_data]}")
result = show_select_window(scene, "選択してください", ["保存1","保存2","終了する"])
case result
when "保存1"
data = {:data => "save data1"}
speak("保存1を選びました。保存内容:#{data}")
data2 = {:data => "日本語1234"}
game.logger.info("#{data2.to_s}")
game.load_wait do |loader|
loader.save_data "savedata", data, :scope => :private
end
when "保存2"
data = [rand(100)]
speak("保存2を選びました。保存内容:#{data}")
game.load_wait do |loader|
loader.save_data "savedata", data, :scope => :private
end
when "終了する"
speak("保存のテストを終了します")
game.change_project "start_menu"
else
speak("ここには来ないはず")
scene_change :start_scene
end
scene_change :start_scene
end
end
# 以下、選択肢を表示する関数
# この関数をコピペして使ってください
def show_select_window(scene, message, selecteds = [])
result = -1
loop_flag = true
sprites = []
if selecteds.length == 0
speak("選択肢がありません")
return -1
elsif selecteds.length == 1
points = [[350, 100]]
elsif selecteds.length == 2
points = [[350, 120], [350, 240]]
elsif selecteds.length == 3
points = [[350, 100], [350, 200], [350, 300]]
else
points = [[350, 80], [350, 160], [350, 240], [350, 320]]
end
# メッセージの表示
text = scene.text :position => [200, 410]
text.set_text_area_size 500, 300
text.set_font_point_size 32
text.set_text(message)
sprites << text
# 選択肢の表示
index = 0
selecteds.each do |item|
text = scene.text :position => points[index]
text.set_text_area_size 240, 70
text.set_font_point_size 32
text.set_text(item)
sprites << text
text.event :on_click do |event|
# 結果をセット
result = item
# 足止め処理を終了する
loop_flag = false
# 選択肢を表示しているスプライトを削除
sprites.each do |sprite|
sprite.delete
end
end
index += 1
end
# 選択肢が選択されるまで処理を足止め
while loop_flag
# wait_time関数を呼ばないとビジーループになってしまう
wait_time(50)
end
result
end