QQ截图20161225130142.png (132.97 KB, 下载次数: 30)
QQ截图20161225130216.png (100.54 KB, 下载次数: 33)
QQ截图20161225130342.png (320.94 KB, 下载次数: 30)
#============================================================================== # ■ Game_Party #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :medals # 獲得済みメダル attr_reader :new_medals # 新規獲得メダル attr_accessor :medal_info_count # メダル情報表示カウント attr_accessor :medal_info_opacity # メダル情報表示不透明度 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias tmmedal_game_party_initialize initialize def initialize tmmedal_game_party_initialize @medals = [] @new_medals = [] @medal_info_count = 0 @medal_info_opacity = 0 end #-------------------------------------------------------------------------- # ○ メダルの獲得 #-------------------------------------------------------------------------- def gain_medal(medal_id) return if @medals.any? {|medal| medal[0] == medal_id } t = Time.now.strftime(" (%Y/%m/%d %H:%M)") @medals.push([medal_id, t]) @new_medals.push([medal_id, t]) end #-------------------------------------------------------------------------- # ○ 獲得メダル情報の消去 #-------------------------------------------------------------------------- def delete_new_medal @new_medals.shift end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ○ メダルの獲得 #-------------------------------------------------------------------------- def gain_medal(medal_id) $game_party.gain_medal(medal_id) end end #============================================================================== # ■ Window_MenuCommand #============================================================================== class Window_MenuCommand #-------------------------------------------------------------------------- # ● 独自コマンドの追加用 #-------------------------------------------------------------------------- alias tmmedal_window_menucommand_add_original_commands add_original_commands def add_original_commands tmmedal_window_menucommand_add_original_commands unless TMMEDAL::HIDE_COMMAND && !medal_enabled add_command(TMMEDAL::COMMAND_MEDAL, :medal, medal_enabled) end end #-------------------------------------------------------------------------- # ○ メダルの有効状態を取得 #-------------------------------------------------------------------------- def medal_enabled !$game_party.medals.empty? end end #============================================================================== # □ Window_MedalInfo #============================================================================== class Window_MedalInfo < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(Graphics.width - window_width, 0, window_width, fitting_height(1)) self.opacity = 0 self.contents_opacity = $game_party.medal_info_opacity refresh end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width return 240 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if $game_party.medal_info_count > 0 self.contents_opacity += 16 $game_party.medal_info_count -= 1 $game_party.delete_new_medal if $game_party.medal_info_count == 0 else self.contents_opacity -= 16 if self.contents_opacity == 0 open unless $game_party.new_medals.empty? end end $game_party.medal_info_opacity = self.contents_opacity end #-------------------------------------------------------------------------- # ● ウィンドウを開く #-------------------------------------------------------------------------- def open refresh TMMEDAL::SE_GAIN_MEDAL.play $game_party.medal_info_count = 150 self.contents_opacity = 0 self end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear unless $game_party.new_medals.empty? draw_background(contents.rect) medal = TMMEDAL::MEDAL_DATA[$game_party.new_medals[0][0]] rect = contents.rect.clone draw_icon(medal[1], rect.x, rect.y) rect.x += 24 rect.width -= 24 draw_text(rect, medal[0]) end end #-------------------------------------------------------------------------- # ○ 背景の描画 #-------------------------------------------------------------------------- def draw_background(rect) temp_rect = rect.clone temp_rect.width /= 2 contents.gradient_fill_rect(temp_rect, back_color2, back_color1) temp_rect.x = temp_rect.width contents.gradient_fill_rect(temp_rect, back_color1, back_color2) end #-------------------------------------------------------------------------- # ○ 背景色 1 の取得 #-------------------------------------------------------------------------- def back_color1 Color.new(0, 0, 0, 192) end #-------------------------------------------------------------------------- # ○ 背景色 2 の取得 #-------------------------------------------------------------------------- def back_color2 Color.new(0, 0, 0, 0) end end #============================================================================== # □ Window_Medal #============================================================================== class Window_Medal < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super refresh select(0) activate end #-------------------------------------------------------------------------- # ● 桁数の取得 #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # ● 項目数の取得 #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # ● アイテムの取得 #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # ● アイテムリストの作成 #-------------------------------------------------------------------------- def make_item_list @data = $game_party.medals end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] medal = TMMEDAL::MEDAL_DATA[item[0]] rect = item_rect(index) draw_icon(medal[1], rect.x, rect.y) rect.x += 24 rect.width -= 216 draw_text(rect, medal[0]) rect.x = contents.width - 192 rect.width = 192 draw_text(rect, item[1], 2) end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help if item medal = TMMEDAL::MEDAL_DATA[item[0]] text = medal[2] @help_window.set_text(text) end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● 全ウィンドウの作成 #-------------------------------------------------------------------------- alias tmmedal_scene_map_create_all_windows create_all_windows def create_all_windows tmmedal_scene_map_create_all_windows create_medal_window end #-------------------------------------------------------------------------- # ○ メダルウィンドウの作成 #-------------------------------------------------------------------------- def create_medal_window @medal_window = Window_MedalInfo.new end end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias tmmedal_scene_menu_create_command_window create_command_window def create_command_window tmmedal_scene_menu_create_command_window @command_window.set_handler(:medal, method(:command_medal)) end #-------------------------------------------------------------------------- # ○ コマンド[メダル] #-------------------------------------------------------------------------- def command_medal SceneManager.call(Scene_Medal) end end #============================================================================== # □ Scene_Medal #============================================================================== class Scene_Medal < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_help_window create_item_window end #-------------------------------------------------------------------------- # ○ アイテムウィンドウの作成 #-------------------------------------------------------------------------- def create_item_window wy = @help_window.height wh = Graphics.height - wy @item_window = Window_Medal.new(0, wy, Graphics.width, wh) @item_window.viewport = @viewport @item_window.help_window = @help_window @item_window.set_handler(:cancel, method(:return_scene)) end end
class Window_MedalInfo < Window_Base def window_width return 240 end end
魔法丶小肉包 发表于 2016-12-25 15:12
成就系统显示的那个字挤在一起的问题可以通过改一下窗口宽度来解决....
class Window_MedalInfo < Window_B ...
逆回十六夜 发表于 2016-12-26 13:53
非常感谢!
那么第二个问题请问有什么眉目嘛
魔法丶小肉包 发表于 2016-12-26 15:31
未测试↓
2个事件并行处理,一个用来显示黑色背景和滚动文字,另一个用来显示图片 ...
百里_飞柳 发表于 2016-12-27 19:03
第二个问题,默认的滚动文字也是会挂起其他事件处理的
如果不想加其他脚本或修改默认脚本,你可以直接把最 ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |