基础的游戏设定菜单脚本(新手向)
这个脚本会变动音乐和音效音量,加上窗口还是全屏的选项。依然是很久以前做的嗯……不知道是不是火星。
整体的思想+基础来自于月光奏鸣曲。
脚本直接加在main之前就行,默认添加选项的是标题画面,当然会脚本的就可以加在菜单里了。
效果:
RUBY 代码
#========================================
#标题添加设定脚本v.1.0
#脚本的想法来自于月光奏鸣曲
#作者为Elamed,使用时请保留以上信息。
#========================================
class Game_System
attr_accessor :bgm_volume
attr_accessor :se_volume
attr_accessor :moniter_mode
def initialize
@bgm_volume = 80
@se_volume = 80
@moniter_mode = 0
end
def bgm_play(bgm)
@playing_bgm = bgm
if bgm != niland bgm.name != ""
Audio.bgm_play("Audio/BGM/" + bgm.name, @bgm_volume, bgm.pitch)
else
Audio.bgm_stop
end
Graphics.frame_reset
end
def bgs_play(bgs)
@playing_bgs = bgs
if bgs != niland bgs.name != ""
Audio.bgs_play("Audio/BGS/" + bgs.name, @bgm.volume, bgs.pitch)
else
Audio.bgs_stop
end
Graphics.frame_reset
end
def me_play(me)
if me != niland me.name != ""
Audio.me_play("Audio/ME/" + me.name, @se.volume, me.pitch)
else
Audio.me_stop
end
Graphics.frame_reset
end
def se_play(se)
if se != niland se.name != ""
Audio.se_play("Audio/SE/" + se.name, @se_volume, se.pitch)
end
end
end
class Scene_Title
def main
if$BTEST
battle_test
return
end
$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")
$game_system = Game_System.new
ifFileTest.exist?("SettingData.rxdata")
file = File.open("SettingData.rxdata", "r")
$data_system_set = load_data("SettingData.rxdata")
$game_system= Marshal.load(file)
file.close
else
file = File.open("SettingData.rxdata", "w")
Marshal.dump($game_system, file)
file.close
end
if$game_system.moniter_mode == 1
unless$keybd
$keybd = Win32API.new'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
$keybd.call 0xA4, 0, 0, 0
$keybd.call13, 0, 0, 0
$keybd.call13, 0, 2, 0
$keybd.call 0xA4, 0, 2, 0
end
end
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# 生成命令窗口
s1 = "新游戏"
s2 = "读取"
s3 = "设定"
s4 = "退出"
@command_window = Window_Command.new(200, )
@command_window.x = 400
@command_window.y = 205
# 判定继续的有效性
# 存档文件一个也不存在的时候也调查
# 有効为 @continue_enabled 为 true、無効为 false
@continue_enabled = false
for i in0..3
ifFileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
if@continue_enabled
@command_window.index = 1
end
# 演奏标题 BGM
$game_system.bgm_play($data_system.title_bgm)
# 停止演奏 ME、BGS
Audio.me_stop
Audio.bgs_stop
# 执行过渡
Graphics.transition
# 主循环
loopdo
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面被切换就中断循环
if$scene != self
break
end
end
# 装备过渡
Graphics.freeze
# 释放命令窗口
@command_window.dispose
# 释放标题图形
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新命令窗口
@command_window.update
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口的光标位置的分支
case@command_window.index
when0# 新游戏
command_new_game
when1# 继续
command_continue
when2
command_option
when3# 退出
command_shutdown
end
end
end
def command_option
$game_system.se_play($data_system.decision_se)
$scene = Scene_Option.new
end
end
class Window_System < Window_Selectable
def initialize
super(160, 100, 300, 32 * 4)
@settings = $game_system
@item_max = 3
self.contents = Bitmap.new(width - 32, @item_max * 32)
refresh
self.index = 0
end
def refresh(bgm_volume = @settings.bgm_volume, se_volume = @settings.se_volume, moniter_mode = @settings.moniter_mode)
self.contents.clear
self.contents.font.size = 16
@settings.bgm_volume = bgm_volume
@settings.se_volume = se_volume
@settings.moniter_mode = moniter_mode
rect = Rect.new(4, 32 * 0, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
text = "BGM: "
blocknum = @settings.bgm_volume / 10
for i in2..blocknum
case i
when2
text = text + ""
when3
text = text + "▁"# 30
when4
text = text + "▂"# 40
when5
text = text + "▃"# 50
when6
text = text + "▄"# 60
when7
text = text + "▅"# 70
when8
text = text + "▆"# 80
when9
text = text + "▇"# 90
when10
text = text + "█"# 100
end
end
self.contents.draw_text(rect, text)
rect = Rect.new(4, 32 * 1, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
blocknum = @settings.se_volume / 10
text = "SE: "
for i in2..blocknum
case i
when2
text = text + ""
when3
text = text + "▁"# 30
when4
text = text + "▂"# 40
when5
text = text + "▃"# 50
when6
text = text + "▄"# 60
when7
text = text + "▅"# 70
when8
text = text + "▆"# 80
when9
text = text + "▇"# 90
when10
text = text + "█"# 100
end
end
self.contents.draw_text(rect, text)
rect = Rect.new(4, 32 * 2, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
text = "模式(需要重新启动游戏):"
case@settings.moniter_mode
when0
text = text + " 窗口"
when1
text = text + " 全屏"
end
self.contents.draw_text(rect, text)
end
end
class Scene_Option
def initialize
@bgm_volume = $game_system.bgm_volume
@se_volume = $game_system.se_volume
@moniter_mode = $game_system.moniter_mode
end
def main
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
@sprite.opacity = 180
@system_window = Window_System.new
@system_window.opacity = 180
# 执行过渡
Graphics.transition
# 主循环
loopdo
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if$scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@system_window.dispose
@sprite.dispose
end
def update
@system_window.update
@sprite.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
$game_system.se_play($data_system.decision_se)
$game_system.bgm_volume = @bgm_volume
$game_system.se_volume = @se_volume
$game_system.moniter_mode = @moniter_mode
file = File.open("SettingData.rxdata", "w")
Marshal.dump($game_system, file)
file.close
# 切换到菜单画面
$scene = Scene_Title.new
return
end
if Input.trigger?(Input::RIGHT)
if@system_window.index == 0
if@bgm_volume < 100
$game_system.se_play($data_system.cursor_se)
@bgm_volume = @bgm_volume + 10
$game_system.bgm_play($data_system.title_bgm)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.cancel_se)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
elsif@system_window.index == 1
if@se_volume < 100
$game_system.se_play($data_system.cursor_se)
@se_volume = @se_volume + 10
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.cancel_se)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
elsif@system_window.index == 2
if@moniter_mode == 0
$game_system.se_play($data_system.decision_se)
@moniter_mode = 1
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.decision_se)
@moniter_mode = 0
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
end
return
end
if Input.trigger?(Input::LEFT)
if@system_window.index == 0
if@bgm_volume > 20
$game_system.se_play($data_system.cursor_se)
@bgm_volume = @bgm_volume - 10
$game_system.bgm_play($data_system.title_bgm)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.cancel_se)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
elsif@system_window.index == 1
if@se_volume > 20
$game_system.se_play($data_system.cursor_se)
@se_volume = @se_volume - 10
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.cancel_se)
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
elsif@system_window.index == 2
if@moniter_mode == 0
$game_system.se_play($data_system.decision_se)
@moniter_mode = 1
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
else
$game_system.se_play($data_system.decision_se)
@moniter_mode = 0
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
end
return
end
@system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
end
end
这个设定脚本很基础,所以基本上还是新手用的可能性比较高……
所以……嗯,后天开始整合新手向简洁菜单以及继续调整游。
本帖来自P1论坛作者艾拉梅德,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=336751若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]