Project1
标题:
如何整合出一个选项
[打印本页]
作者:
fox1313304
时间:
2015-1-13 11:19
标题:
如何整合出一个选项
按esc进入menu之后
想要把读档 存档 退出游戏 整合成一个系统选项
点系统之后 在原来显示状态的地方出现3个小的选项 即读档 存档 退出游戏
作者:
15968715431
时间:
2015-1-13 11:32
=begin
===============================================================================
菜单中的系统指令合并 By喵呜喵5
===============================================================================
【说明】
将存档、读档、结束游戏这三个指令合并到了同一个界面
=end
$m5script = {} if $m5script.nil?
$m5script["M5Menu20140222"] = true
module M5Menu20140222
#==============================================================================
# 设定部分
#==============================================================================
VOCAB1 = "系统"
#菜单中该界面的指令名称
VOCAB2 = "读取记录"
#该界面中读取存档的指令名称
SAVE = true
#显示存档指令
LOAD = true
#显示读档指令
#==============================================================================
# 设定结束
#==============================================================================
end
class Window_MenuCommand
def add_save_command
end
alias m5_20140617_add_game_end_command add_game_end_command
def add_game_end_command
return m5_20140617_add_game_end_command if $m5script["M5MenuCommand"]
add_command(M5Menu20140222::VOCAB1, :game_end)
end
end
class Window_GameEnd
alias m5_20140222_make_command_list make_command_list
def make_command_list
add_command(Vocab::save, :m5_save, save_enabled) if M5Menu20140222::SAVE
add_command(M5Menu20140222::VOCAB2, :m5_load) if M5Menu20140222::LOAD
m5_20140222_make_command_list
end
def save_enabled
!$game_system.save_disabled
end
end
class Scene_End
alias m5_20140222_create_command_window create_command_window
def create_command_window
m5_20140222_create_command_window
@command_window.set_handler(:m5_save, method(:command_to_m5save))
@command_window.set_handler(:m5_load, method(:command_to_m5load))
end
def command_to_m5load
SceneManager.call(Scene_Load)
end
def command_to_m5save
SceneManager.call(Scene_Save)
end
end
复制代码
作者:
tseyik
时间:
2015-1-13 12:01
http://woodpenguin.web.fc2.com/rgss3/sub_menu.html
オリジナルサブメニュー
可在menu加入任意指令指定執行公共事件
例:List = [["コンフィング", 1, 2],]
加入指令コンフィング,撰擇コンフィング後執行公共事件1>執行公共事件2
可加入多個不同指令
=begin
▼ オリジナルサブメニュー ver. 1.0
RPGツクールVXAce用スクリプト
制作 : 木星ペンギン
URL : http://woodpenguin.blog.fc2.com/
------------------------------------------------------------------------------
概要
□ コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。
------------------------------------------------------------------------------
備考
□ コマンドは【並び替え】の下に追加されます。
□ サブメニューの処理はイベントコマンドで実行されます。
・メインのコモンイベントの処理が終了した時点で、前の画面に戻ります。
・サブのコモンイベントは処理が終了しても最初から繰り返しません。
□ イベントの移動などを実行した場合、新しくメニュー画面用のイベントが
生成されます。
・座標 X:0 Y:0 にグラフィックを設定していない状態で生成されます。
□ スクリプトコマンドで SceneManager.goto(Scene_Map) と実行すれば
マップ画面まで戻ることが出来ます。
=end
module WdTk
module SubMenu
#--------------------------------------------------------------------------
# ● 追加する項目の設定
# 配列にコマンド名、実行するコモンイベントID、
# 並列処理を行うコモンイベントIDの順に設定する。
#--------------------------------------------------------------------------
List = [["コンフィング", 1, 2],
]
#//////////////////////////////////////////////////////////////////////////////
#
# 以降、変更する必要なし
#
#//////////////////////////////////////////////////////////////////////////////
end
@material ||= []
@material << :SubMenu
def self.include?(sym)
@material.include?(sym)
end
end
#==============================================================================
# ■ Game_SubMenu_Character
#==============================================================================
class Game_SubMenu_Character < Game_Character
#--------------------------------------------------------------------------
# ● 通行可能判定
#--------------------------------------------------------------------------
def passable?(*)
return true
end
#--------------------------------------------------------------------------
# ● 斜めの通行可能判定
#--------------------------------------------------------------------------
def diagonal_passable?(*)
return true
end
#--------------------------------------------------------------------------
# ● 指定位置に移動
#--------------------------------------------------------------------------
def moveto(x, y)
@x = x
@y = y
@real_x = @x
@real_y = @y
@prelock_direction = 0
straighten
update_bush_depth
end
#--------------------------------------------------------------------------
# ● 画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x
@real_x * 32 + 16
end
#--------------------------------------------------------------------------
# ● 画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y
@real_y * 32 + 32 - shift_y - jump_height
end
#--------------------------------------------------------------------------
# ● ジャンプ時の更新
#--------------------------------------------------------------------------
def update_jump
@jump_count -= 1
@real_x = (@real_x * @jump_count + @x) / (@jump_count + 1.0)
@real_y = (@real_y * @jump_count + @y) / (@jump_count + 1.0)
update_bush_depth
if @jump_count == 0
@real_x = @x
@real_y = @y
end
end
#--------------------------------------------------------------------------
# ● 梯子判定
#--------------------------------------------------------------------------
def ladder?
return false
end
#--------------------------------------------------------------------------
# ● 茂み判定
#--------------------------------------------------------------------------
def bush?
return false
end
#--------------------------------------------------------------------------
# ● 地形タグの取得
#--------------------------------------------------------------------------
def terrain_tag
return 0
end
#--------------------------------------------------------------------------
# ● リージョン ID の取得
#--------------------------------------------------------------------------
def region_id
return 0
end
#--------------------------------------------------------------------------
# ● まっすぐに移動
# d : 方向(2,4,6,8)
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_straight(d, turn_ok = true)
@move_succeed = passable?(@x, @y, d)
if @move_succeed
set_direction(d)
@x += d == 6 ? 1 : d == 4 ? -1 : 0
@y += d == 2 ? 1 : d == 8 ? -1 : 0
increase_steps
elsif turn_ok
set_direction(d)
end
end
#--------------------------------------------------------------------------
# ● 斜めに移動
# horz : 横方向(4 or 6)
# vert : 縦方向(2 or 8)
#--------------------------------------------------------------------------
def move_diagonal(horz, vert)
@move_succeed = diagonal_passable?(x, y, horz, vert)
if @move_succeed
@x += horz == 6 ? 1 : horz == 4 ? -1 : 0
@y += vert == 2 ? 1 : vert == 8 ? -1 : 0
increase_steps
end
set_direction(horz) if @direction == reverse_dir(horz)
set_direction(vert) if @direction == reverse_dir(vert)
end
#--------------------------------------------------------------------------
# ● X 方向の距離計算
#--------------------------------------------------------------------------
def distance_x_from(x)
@x - x
end
#--------------------------------------------------------------------------
# ● Y 方向の距離計算
#--------------------------------------------------------------------------
def distance_y_from(y)
@y - y
end
end
#==============================================================================
# ■ Game_SubMenu_Interpreter
#==============================================================================
class Game_SubMenu_Interpreter < Game_Interpreter
#--------------------------------------------------------------------------
# ● イベントのセットアップ
#--------------------------------------------------------------------------
def setup(list, scene)
clear
[url=home.php?mod=space&uid=420706]@Scene[/url] = scene
@list = list
create_fiber
end
#--------------------------------------------------------------------------
# ● 実行
#--------------------------------------------------------------------------
def run
while @list[@index] do
execute_command
@index += 1
end
Fiber.yield
@fiber = nil
end
#--------------------------------------------------------------------------
# ● 画面系コマンドの対象を取得
#--------------------------------------------------------------------------
def screen
@scene.screen
end
#--------------------------------------------------------------------------
# ● キャラクターの取得
#--------------------------------------------------------------------------
def get_character(param)
param > 0 ? @scene.get_event(param) : nil
end
#--------------------------------------------------------------------------
# ● コモンイベント
#--------------------------------------------------------------------------
def command_117
common_event = $data_common_events[@params[0]]
if common_event
child = Game_SubMenu_Interpreter.new(@depth + 1)
child.setup(common_event.list, @scene)
child.run
end
end
end
#==============================================================================
# ■ Window_MenuCommand
#==============================================================================
class Window_MenuCommand
#--------------------------------------------------------------------------
# ○ 独自コマンドの追加用
#--------------------------------------------------------------------------
alias _wdtk_submenu_add_original_commands add_original_commands
def add_original_commands
WdTk::SubMenu::List.each {|com| add_command(com[0], :submenu) if com }
end
#--------------------------------------------------------------------------
# ● 選択項目の名前を取得
#--------------------------------------------------------------------------
def current_name
current_data ? current_data[:name] : nil
end
end
#==============================================================================
# ■ Spriteset_SubMenu
#==============================================================================
class Spriteset_SubMenu
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(scene)
@scene = scene
create_viewports
@character_sprites = []
@picture_sprites = []
update
end
#--------------------------------------------------------------------------
# ● ビューポートの作成
#--------------------------------------------------------------------------
def create_viewports
@viewport1 = Viewport.new
@viewport2 = Viewport.new
@viewport2.z = 50
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
dispose_characters
@picture_sprites.compact.each {|sprite| sprite.dispose }
dispose_viewports
end
#--------------------------------------------------------------------------
# ● キャラクタースプライトの解放
#--------------------------------------------------------------------------
def dispose_characters
@character_sprites.compact.each {|sprite| sprite.dispose }
end
#--------------------------------------------------------------------------
# ● ビューポートの解放
#--------------------------------------------------------------------------
def dispose_viewports
@viewport1.dispose
@viewport2.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
update_characters
update_pictures
update_viewports
end
#--------------------------------------------------------------------------
# ● キャラクタースプライトの更新
#--------------------------------------------------------------------------
def update_characters
@scene.events.each do |i, event|
@character_sprites[i] ||= Sprite_Character.new(@viewport1, event)
@character_sprites[i].update
end
end
#--------------------------------------------------------------------------
# ● ピクチャスプライトの更新
#--------------------------------------------------------------------------
def update_pictures
@scene.screen.pictures.each do |pic|
@picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
@picture_sprites[pic.number].update
end
end
#--------------------------------------------------------------------------
# ● ビューポートの更新
#--------------------------------------------------------------------------
def update_viewports
@viewport1.tone.set(@scene.screen.tone)
@viewport1.ox = @scene.screen.shake
@viewport2.color.set(@scene.screen.flash_color)
@viewport1.update
@viewport2.update
end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ○ コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias _wdtk_submenu_create_command_window create_command_window
def create_command_window
_wdtk_submenu_create_command_window
@command_window.set_handler(:submenu, method(:command_submenu))
end
#--------------------------------------------------------------------------
# ● コマンド[サブメニュー]
#--------------------------------------------------------------------------
def command_submenu
param = WdTk::SubMenu::List.assoc(@command_window.current_name)
if param
SceneManager.call(Scene_ExSubMenu)
SceneManager.scene.prepare(*param)
else
@command_window.activate
end
end
end
#==============================================================================
# ■ Scene_ExSubMenu
#==============================================================================
class Scene_ExSubMenu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :screen
attr_reader :events
#--------------------------------------------------------------------------
# ● 準備
#--------------------------------------------------------------------------
def prepare(menu_name, main_id, sub_id)
@screen = Game_Screen.new
@main_interpreter = Game_SubMenu_Interpreter.new
common_event = $data_common_events[main_id]
@main_interpreter.setup(common_event.list, self) if common_event
@sub_interpreter = Game_SubMenu_Interpreter.new
common_event = $data_common_events[sub_id]
@sub_interpreter.setup(common_event.list, self) if common_event
@events = {}
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
@spriteset = Spriteset_SubMenu.new(self)
create_message_window
create_scroll_text_window
end
#--------------------------------------------------------------------------
# ● 終了前処理
#--------------------------------------------------------------------------
def pre_terminate
super
pre_battle_scene if SceneManager.scene_is?(Scene_Battle)
pre_title_scene if SceneManager.scene_is?(Scene_Title)
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
@spriteset.dispose
perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
end
#--------------------------------------------------------------------------
# ● フレーム更新(基本)
#--------------------------------------------------------------------------
def update_basic
super
@main_interpreter.update
return return_scene unless @main_interpreter.running?
@sub_interpreter.update
@events.each_value {|event| event.update }
@spriteset.update
end
#--------------------------------------------------------------------------
# ● 汎用フェード処理
#--------------------------------------------------------------------------
def fade_loop(duration)
duration.times do |i|
yield 255 * (i + 1) / duration
update_basic
end
end
#--------------------------------------------------------------------------
# ● 画面のフェードイン
#--------------------------------------------------------------------------
def fadein(duration)
fade_loop(duration) {|v| Graphics.brightness = v }
end
#--------------------------------------------------------------------------
# ● 画面のフェードアウト
#--------------------------------------------------------------------------
def fadeout(duration)
fade_loop(duration) {|v| Graphics.brightness = 255 - v }
end
#--------------------------------------------------------------------------
# ● メッセージウィンドウの作成
#--------------------------------------------------------------------------
def create_message_window
@message_window = Window_Message.new
end
#--------------------------------------------------------------------------
# ● スクロール文章ウィンドウの作成
#--------------------------------------------------------------------------
def create_scroll_text_window
@scroll_text_window = Window_ScrollText.new
end
#--------------------------------------------------------------------------
# ● バトル画面遷移の前処理
#--------------------------------------------------------------------------
def pre_battle_scene
Graphics.update
Graphics.freeze
@spriteset.dispose_characters
BattleManager.save_bgm_and_bgs
BattleManager.play_battle_bgm
Sound.play_battle_start
end
#--------------------------------------------------------------------------
# ● タイトル画面遷移の前処理
#--------------------------------------------------------------------------
def pre_title_scene
fadeout(60)
end
#--------------------------------------------------------------------------
# ● 戦闘前トランジション実行
#--------------------------------------------------------------------------
def perform_battle_transition
Graphics.transition(60, "Graphics/System/BattleStart", 100)
Graphics.freeze
end
#--------------------------------------------------------------------------
# ● イベントの取得
#--------------------------------------------------------------------------
def get_event(event_id)
@events[event_id] ||= Game_SubMenu_Character.new
end
end
复制代码
作者:
fox1313304
时间:
2015-1-13 16:42
15968715431 发表于 2015-1-13 11:32
solved, thanks.
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1