=begin RGSS3 ★ MAPナビゲーション ★ 上に立つとプレイヤーの頭上に文字列を描画するイベントを作れます。 ● 基本的な使い方 ●================================================ イベントの名前に #navi という文字列を含ませてください。 -------------------------------------------------------------------- プレイヤーがイベントの上に立った時、イベント名を頭上へ表示します。 この際、 #navi という文字列は取り除かれて表示されます。 ==================================================================== ● イベントページ毎に表示する文字列を指定する ●==================== イベントページの実行内容の先頭を「注釈」コマンドにし、 注釈の内容に #navi という文字列を含ませてください。 -------------------------------------------------------------------- プレイヤーがイベントの上に立った時、注釈の内容を頭上へ表示します。 この際、 #navi という文字列は取り除かれて表示されます。 ==================================================================== ver1.11 Last Update : 2016/11/19 11/19 : イベントの一時消去でエラーが発生する不具合を修正 11/19 : イベントのページを切り替えることで表示する文字列を変更できるようになりました ----------------------2016-------------------------- 12/18 : RGSS2からの移植 ----------------------2011-------------------------- ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end #=================================== # ●設定箇所 #=================================== module Rokan module Map_Navi # ナビゲーションのy座標調整 NAVI_ADJUST_Y = 0 # ナビゲーションの表示を許可するスイッチ番号 NAVI_SWITCH = 15 end end #=================================== # ここまで #=================================== $rsi ||= {} $rsi["MAPナビゲーション"] = true class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● 同位置のイベント取得 #-------------------------------------------------------------------------- def get_event_here $game_map.events_xy(@x, @y).first end end class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :navi #-------------------------------------------------------------------------- # ● イベントページのセットアップ #-------------------------------------------------------------------------- alias _map_navi_setup_page setup_page def setup_page(new_page) _map_navi_setup_page(new_page) if new_page @navi = @event.name.include?("#navi") ? @event.name.delete("#navi") : nil if @page.list[0].code == 108 && @page.list[0].parameters[0].include?("#navi") @navi = @page.list[0].parameters[0].delete("#navi") end else @navi = nil end end end class Sprite_Navi < Sprite #-------------------------------------------------------------------------- # ● インクルード Rokan::Map_Navi #-------------------------------------------------------------------------- include Rokan::Map_Navi #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(nil) create_bitmep self.bitmap.font.size = 18 @text = "" end #-------------------------------------------------------------------------- # ● 背景グラデーションカラーの取得1 #-------------------------------------------------------------------------- def gradient_color1 Color.new(0, 0, 80, 180) end #-------------------------------------------------------------------------- # ● 背景グラデーションカラーの取得2 #-------------------------------------------------------------------------- def gradient_color2 Color.new(0, 0, 80, 20) end #-------------------------------------------------------------------------- # ● ビットマップの作成 #-------------------------------------------------------------------------- def create_bitmep self.bitmap = Bitmap.new(150, 22) @back_bitmap = Bitmap.new(150, 22) @back_bitmap.gradient_fill_rect(0, 0, 75, 22, gradient_color2, gradient_color1) @back_bitmap.gradient_fill_rect(75, 0, 75, 22, gradient_color1, gradient_color2) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose @back_bitmap.dispose self.bitmap.dispose super end #-------------------------------------------------------------------------- # ● MAPナビゲーションを表示するか #-------------------------------------------------------------------------- def put_navigate?(event) $game_switches[NAVI_SWITCH]&&event&&event.navi end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update if !$game_map.interpreter.running? && !$game_message.visible event = $game_player.get_event_here if put_navigate?(event) update_navi_position set_navi(event.navi) else set_navi("") end else set_navi("") end end #-------------------------------------------------------------------------- # ● ナビゲーション位置の更新 #-------------------------------------------------------------------------- def update_navi_position self.x = $game_player.screen_x - 75 self.y = $game_player.screen_y - 78 + NAVI_ADJUST_Y end #-------------------------------------------------------------------------- # ● ナビ設定 #-------------------------------------------------------------------------- def set_navi(text) if @text != text @text = text self.bitmap.clear unless @text.empty? self.bitmap.blt(0, 0, @back_bitmap, @back_bitmap.rect, 180) self.bitmap.draw_text(0, 1, self.bitmap.width, self.bitmap.height, @text, 1) end end end end class Spriteset_Map #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias _navi_initialize initialize def initialize create_navi _navi_initialize end #-------------------------------------------------------------------------- # ● ナビの作成 #-------------------------------------------------------------------------- def create_navi @navi_window = Sprite_Navi.new end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- alias _navi_dispose dispose def dispose dispose_navi _navi_dispose end #-------------------------------------------------------------------------- # ● ナビの解放 #-------------------------------------------------------------------------- def dispose_navi @navi_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias _navi_update update def update update_navi _navi_update end #-------------------------------------------------------------------------- # ● ナビの更新 #-------------------------------------------------------------------------- def update_navi @navi_window.update end end