赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 9396 |
最后登录 | 2017-5-25 |
在线时间 | 262 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 262 小时
- 注册时间
- 2009-10-13
- 帖子
- 112
|
- #◆◇◆◇◆ 明かりスクリプトVX ver 1.05 ◇◆◇◆◇
- # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
- # by みんと
- =begin
- ※ 導入場所の注意
- すべてモジュールで管理されていますので、
- マスタースクリプトより下であれば導入場所は関係ありません。
- ■ 更新履歴
- ○ ver 1.05(2009/09/13)
- 同じマップに移動した場合に明かりが消えるミスを修正
- 他サイトさんの隊列歩行に対応
- ○ ver 1.04(2009/08/19)
- 場所移動補助が正常に動作しないミスを修正
- ○ ver 1.03(2009/02/14)
- 場所移動直後に明かりがつかないミスを修正
-
- ○ ver 1.02(2009/02/13)
- 1つでも明かりを解放すると
- すべての明かりが消えてしまうミスを修正
-
- ○ ver 1.01(2009/02/10)
- メニューを開くと明かりが消えるミスを修正
-
- ○ ver 1.00(2009/02/07)
- 公開
- ■ 説明
- イベントに明かりを設定出来るようにします。
- 明かりは画面の色調よりも全面に出るため、
- 明かりの範囲内は明るく表示されます。
- ◆ 設定方法及び仕様
- 設定にはイベントの内容に
- 「どこでもいいので」注釈を置きます。
- そして、注釈の内容を
- 明かり設定1
- といったように"明かり設定の後"に"半角の数字"を記入してください。
- 記入した数字が、明かりデータの管理IDとなります。
- 明かりはイベントの不透明度と同期して強さが変化します。
- イベントが完全に透明になれば明かりも完全に消えますので、
- 明かりを個別に消したい場合は、
- 移動ルートなどで対象イベントの不透明度を0にしてください。
- また、新しいページに注釈で設定されていない場合も明かりは消えます。
- ◆ 画像の規格
- 明かりに使用する画像の規格は任意です。
- ただし、1コマの規格は「画像の全体の横幅を4で割った値」となります。
- つまり、640*160ピクセルの画像の場合、
- 1コマの規格は160*160となります。
- 画像は全て左から順に 0→1→2→3→0 と4コマループします。
- 明かり用の画像はピクチャーフォルダにインポートしてください。
- =end
- #==============================================================================
- # ☆ MINTO
- #------------------------------------------------------------------------------
- # 様々なフラグを扱うメインモジュールです。
- #==============================================================================
- module MINTO
-
- # 明かりスクリプトVXを有効化 ( true で有効 / false で無効 )
- RGSS["Light_Sprite"] = true
-
- end
- # 明かりスクリプトVXが有効な場合に以降の処理を実行する
- if MINTO::RGSS["Light_Sprite"] == true then
- #==============================================================================
- # ☆ カスタマイズ
- #------------------------------------------------------------------------------
- # 機能のカスタマイズをここで行います。
- #==============================================================================
- module MINTO
- #--------------------------------------------------------------------------
- # ● 明かりのセット
- # belong_id : 明かりの管理ID
- #--------------------------------------------------------------------------
- def self.light_set(belong_id)
- # 明かりの管理IDに応じて分岐
- case belong_id
- when 1 then
- # data = [画像ファイル名, Y座標修正値, 大きさ(通常2。 小数点可)]
- data = ["stove", 0, 6]
- when 2 then
- data = ["Light_Sprite02", -16, 2]
- # それ以外の名前の場合
- else
- data = ["", 0, 1]
- end
- # 設定データを返す
- return data.dup
- end
- end
- #==============================================================================
- # ☆ Add_Light_Sprite
- #------------------------------------------------------------------------------
- # Sprite_Characterクラスに機能を追加するモジュールです。
- # 明かりの機能を追加します。
- #==============================================================================
- module Add_Light_Sprite
- #--------------------------------------------------------------------------
- # ● 解放(明かり)
- #--------------------------------------------------------------------------
- def dispose_light
- # 明かりが存在する場合
- if @light_sprite != nil then
- # 明かりを解放
- @light_sprite.bitmap.dispose
- @light_sprite.dispose
- @light_sprite = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- # 明かりを解放
- dispose_light
- # 明かり可視フラグをクリア
- @character.light_visible = false
- # 明かり作成フラグをクリア
- @character.call_light = false
- # 最終ページ情報を解放
- @character.dispose_data
- # スーパークラスの処理に移行
- super
- end
- #--------------------------------------------------------------------------
- # ● 明かりの設定
- # id : 明かりのID
- #--------------------------------------------------------------------------
- def light_set(id)
- # 明かりを解放
- dispose_light
- # 明かりを作成
- @light_sprite = Light_Sprite.new(self, id)
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # スーパークラスの処理に移行
- super
- # キャラクターが無効な場合
- if @character == nil then
- # メソッドを返す
- return
- end
- # 明かりデータを取得
- @character.get_light_data
- # 明かり可視フラグが無効な場合
- if @character.light_visible != true then
- # 明かりを解放
- dispose_light
- # メソッドを返す
- return
- end
- # 明かり作成フラグが有効な場合
- if @character.call_light == true then
- # 明かり作成フラグをオフにする
- @character.call_light = false
- # 明かりを作成
- light_set(@character.light_id)
- end
- # 明かりが無効な場合
- if @light_sprite == nil then
- # メソッドを返す
- return
- end
- # 明かりを更新
- @light_sprite.update
- end
- end
- #==============================================================================
- # ☆ Add_Game_Event_Light
- #------------------------------------------------------------------------------
- # Game_Eventクラスに機能を追加するモジュールです。
- # 明かりの機能を追加します。
- #==============================================================================
- module Add_Game_Event_Light
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- # スーパークラスの処理に移行
- super
- @last_page_light = {}
- end
- #--------------------------------------------------------------------------
- # ● データのリセット
- #--------------------------------------------------------------------------
- def self.reset
- @last_page_light = {}
- end
- #--------------------------------------------------------------------------
- # ● データ解放
- #--------------------------------------------------------------------------
- def dispose_data
- # 無効なデータの場合
- if @last_page_light == nil then
- # データを初期化
- @last_page_light = {}
- # メソッドを返す
- return
- end
- # 自身のデータをクリア
- @last_page_light[self] = nil
- end
- #--------------------------------------------------------------------------
- # ● 拡張データの取得
- #--------------------------------------------------------------------------
- def get_light_data
- # 無効なデータの場合
- if @last_page_light == nil then
- # データを初期化
- @last_page_light = {}
- end
- # イベントページが更新されていない場合
- if @last_page_light[self] == @page then
- # データ未定義の場合
- if self.light_visible == nil then
- # 自身のデータをクリア
- @last_page_light[self] = nil
- end
- # メソッドを返す
- return
- end
- # 明かり可視フラグをクリア
- self.light_visible = false
- # 明かり作成フラグをクリア
- self.call_light = false
- # 最新のイベントページを記憶
- @last_page_light[self] = @page
- # イベントページが有効な場合
- if @page != nil then
- # イベントページに内容が存在する場合
- if @page.list != nil then
- # ループ処理(ページ内容)
- ([email protected]).each do |i|
- # 注釈の場合
- if @page.list[i].code == 108 or @page.list[i].code == 408 then
- # 注釈内ループ処理
- ([email protected][i].parameters.size).each do |id|
- # 注釈のコードを取得
- code = @page.list[i].parameters[id].dup
- # 明かりのIDを取得
- light_id = code.dup.split(/\明かり設定/)[1].to_i
- # 明かりのIDが有効な場合
- if light_id >= 1 then
- # 明かりIDを記憶
- self.light_id = light_id
- # 明かり可視フラグをオンにする
- self.light_visible = true
- # 明かりを作成フラグをオンにする
- self.call_light = true
- # メソッドを返す
- return
- end
- end
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # スーパークラスの処理に移行
- super
- end
- end
- #==============================================================================
- # ■ Light_Sprite
- #------------------------------------------------------------------------------
- # マップでの明かりを管理するスプライトクラスです。
- #==============================================================================
- class Light_Sprite < Sprite
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :name # 明かりに使う画像
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # character : 対象キャラクター
- # event_name : イベントの名前
- #--------------------------------------------------------------------------
- def initialize(character, event_name)
- # スーパークラスを実行
- super()
- # 明かりのデータを取得
- @data = MINTO.light_set(event_name)
- # ファイルネームを読み込む
- @name = @data[0].dup
- # スプライトを保存
- @character = character
- # 明かり用のビットマップを作成
- self.bitmap = Cache.picture(@name).dup
- @width = self.bitmap.width / 4
- @height = self.bitmap.height
- # 基本座標をセット
- self.x = @character.x
- self.y = @character.y
- self.z = 999
- # 転移座標をセット
- self.ox = @width / 2
- self.oy = @height / 2
- # 透明でない限りは明かりを表示させる
- self.visible = (@character.opacity != 0)
- # 明かりの不透明度を設定
- self.opacity = (@character.opacity / 2) + 32
- # 明かりを加算表示にする
- self.blend_type = 1
- # 明かりをズームさせる
- self.zoom = @data[2]
- # ブリンクカウントを初期化
- @blink_count = 0
- # フレーム更新
- update
- end
- #--------------------------------------------------------------------------
- # ● データのセット
- # name : 設定データの名前
- #--------------------------------------------------------------------------
- def set_data(name)
- # 設定データを更新
- @data = MINTO.light_set(name)
- # 明かり用のビットマップを再作成
- self.bitmap = Cache.picture(@data[0]).dup
- self.oy = @data[1]
- self.zoom = @data[2]
- end
- #--------------------------------------------------------------------------
- # ● ズーム
- # n : ズーム倍率
- #--------------------------------------------------------------------------
- def zoom=(n)
- self.zoom_x = n
- self.zoom_y = n
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- # スーパークラスを実行
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- # 基本情報を更新
- self.x = @character.character.screen_x
- self.y = @character.character.screen_y + @data[1]
- # 透明でない限りは明かりを表示させる
- self.visible = (@character.character.opacity != 0)
- # 明かりの不透明度を設定
- self.opacity = (@character.character.opacity / 2) + 32
- # 点滅カウントを更新
- @blink_count = (@blink_count + 1) % 48
- # 転送元の矩形を設定
- case @blink_count
- when 0...12 then
- self.src_rect.set(@width * 0, 0, @width, @height)
- when 12...24 then
- self.src_rect.set(@width * 1, 0, @width, @height)
- when 24...36 then
- self.src_rect.set(@width * 2, 0, @width, @height)
- else
- self.src_rect.set(@width * 3, 0, @width, @height)
- end
- end
- end
- #==============================================================================
- # ■ Game_Event
- #------------------------------------------------------------------------------
- # イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
- # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(Add_Game_Event_Light) # 明かり管理モジュール
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :event # イベント
- attr_accessor :light_id # 明かりのID
- attr_accessor :light_visible # 明かり可視フラグ
- attr_accessor :call_light # 明かり実行フラグ
- end
- #==============================================================================
- # ■ Game_Vehicle
- #------------------------------------------------------------------------------
- # 乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
- # 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
- #==============================================================================
- class Game_Vehicle < Game_Character
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(Add_Game_Event_Light) # 明かり管理モジュール
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :event # イベント
- attr_accessor :light_id # 明かりのID
- attr_accessor :light_visible # 明かり可視フラグ
- attr_accessor :call_light # 明かり実行フラグ
- end
- #==============================================================================
- # ■ Game_Player
- #------------------------------------------------------------------------------
- # プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
- # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
- #==============================================================================
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(Add_Game_Event_Light) # 明かり管理モジュール
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :event # イベント
- attr_accessor :light_id # 明かりのID
- attr_accessor :light_visible # 明かり可視フラグ
- attr_accessor :call_light # 明かり実行フラグ
- end
- #==============================================================================
- # ■ Game_Subplayer
- #------------------------------------------------------------------------------
- # サブプレイヤーを扱うクラスです。
- # このクラスのインスタンスは $game_subplayer1~3で参照されます。
- # Game_Playerクラスを元に作っています
- #==============================================================================
- class Game_Subplayer < Game_Character
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(Add_Game_Event_Light) # 明かり管理モジュール
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :event # イベント
- attr_accessor :light_id # 明かりのID
- attr_accessor :light_visible # 明かり可視フラグ
- attr_accessor :call_light # 明かり実行フラグ
- end
- #==============================================================================
- # ■ Game_Interpreter
- #------------------------------------------------------------------------------
- # イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
- # Game_Troop クラス、Game_Event クラスの内部で使用されます。
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● 場所移動
- #--------------------------------------------------------------------------
- alias :command_201_Light_Sprite :command_201
- def command_201
- # 元の処理を実行
- bool = command_201_Light_Sprite
- # 明かりのデータを初期化
- Add_Game_Event_Light.reset
- # フラグを返す
- return bool
- end
- end
- #==============================================================================
- # ■ Sprite_Character
- #------------------------------------------------------------------------------
- # キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを
- # 監視し、スプライトの状態を自動的に変化させます。
- #==============================================================================
- class Sprite_Character < Sprite_Base
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(Add_Light_Sprite) # 明かりモジュール
- end
- end
复制代码 希望有人解答一下
因為我用的時候 RGSS["Light_Sprite"] = true 這行已經出現錯誤... |
评分
-
查看全部评分
|