查看: 2020|回复: 1

[已经解决] 请教一下关于照明脚本(明かりスクリプト)的设定问题

[复制链接]
梦石
20
星屑
13965
在线时间
1744 小时
注册时间
2017-1-12
回帖
1667

MZ评测员开拓者

发表于 2018-2-24 22:22:02 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
是这样,使用这个脚本时灯光会覆盖在图片及对话框上层。
如图,闪光的地方是原本设定在地图上的照明处,显示图片以后直接覆盖在上面了。
截图.png

这是烛光图片
stove.png
Light_Sprite02.png

以下是该脚本以及相应辅助的脚本。
想问一下应该改哪里的设定让这个光不要透过图片和对话框。
[pre lang="ruby"]#◆◇◆◇◆ 明かりスクリプトVXA ver 1.00 ◇◆◇◆◇
#  サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
#   by みんと

=begin

※ 導入場所の注意

すべてモジュールで管理されていますので、
マスタースクリプトより下であれば導入場所は関係ありません。

■ 更新履歴

○ ver 1.00(2012/01/16)
公開

■ 説明

イベントに明かりを設定出来るようにします。
明かりは画面の色調よりも全面に出るため、
明かりの範囲内は明るく表示されます。

◆ 設定方法及び仕様

設定にはイベントの内容に
「どこでもいいので」注釈を置きます。
そして、注釈の内容を

◆ 明かり設定1

といったように"明かり設定の後"に"半角の数字"を記入してください。
記入した数字が、明かりデータの管理IDとなります。

明かりはイベントの不透明度と同期して強さが変化します。
イベントが完全に透明になれば明かりも完全に消えますので、
明かりを個別に消したい場合は、
移動ルートなどで対象イベントの不透明度を0にしてください。

また、新しいページに注釈で設定されていない場合も明かりは消えます。

◆ 画像の規格

明かりに使用する画像の規格は任意です。
ただし、1コマの規格は「画像の全体の横幅を4で割った値」となります。
つまり、640*160ピクセルの画像の場合、
1コマの規格は160*160となります。

画像は全て左から順に 0→1→2→3→0 と4コマループします。

明かり用の画像はピクチャーフォルダにインポートしてください。

=end

#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
#   様々なフラグを扱うメインモジュールです。
#==============================================================================

module MINTO
  
  # 明かりスクリプトVXAを有効化 ( true で有効 / false で無効 )
  RGSS["明かりスクリプトVXA"] = true
  
end

# 明かりスクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["明かりスクリプトVXA"] == 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
        # ループ処理(ページ内容)
        (0...@page.list.size).each do |i|
          # 注釈の場合
          if @page.list.code == 108 or @page.list.code == 408 then
            # 注釈内ループ処理
            (0...@page.list.parameters.size).each do |id|
              # 注釈のコードを取得
              code = @page.list.parameters[id].dup.to_s
              code.gsub!(/明かり設定/) {""}
              # 明かりのIDを取得
              light_id = code.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_Follower
#------------------------------------------------------------------------------
#  フォロワーを扱うクラスです。フォロワーとは、隊列歩行で表示する、先頭以外の
# 仲間キャラクターのことです。Game_Followers クラスの内部で参照されます。
#==============================================================================

class Game_Follower < 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
[/pre]
[pre lang="ruby"]#◆◇◆◇◆  マスタースクリプトVXA ver 1.00  ◇◆◇◆◇
#  サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
#   by みんと

=begin

■ 更新履歴

○ Ver 1.00(2012/01/16)
公開

■ 説明

全てのみんとRGSSより上に導入してください。
(基本的にシステム上部に導入してください)

これがないと全てのみんとRGSS3は動作いたしません。

=end

#==============================================================================
# ☆ MINTO
#------------------------------------------------------------------------------
#   様々なフラグを扱うメインモジュールです。
#==============================================================================

module MINTO
  
  # VXRGSSの導入環境ハッシュを初期化
  RGSS = {}
  
end

#==============================================================================
# ☆ MINTO_System
#------------------------------------------------------------------------------
#   様々な機能を扱うシステムモジュールです。
#==============================================================================

module MINTO_System
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    @tone_rate = 0
    # シーンスプライトを作成
    @scene_sprite = Sprite_Base.new
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● トランジション実行
  #--------------------------------------------------------------------------
  def perform_transition
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● 開始後処理
  #--------------------------------------------------------------------------
  def post_start
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # シーンスプライトを更新
    @scene_sprite.update
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  def pre_terminate
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    # シーンスプライトを解放
    @scene_sprite.bitmap.dispose if @scene_sprite.bitmap
    @scene_sprite.dispose
    @scene_sprite = nil
    # スーパークラスを実行
    super
  end
end

# ☆ 開発用メソッド追加 ☆

#==============================================================================
# ■ Scene_Base
#------------------------------------------------------------------------------
#  ゲーム中のすべてのシーンのスーパークラスです。
#==============================================================================

class Scene_Base
  #--------------------------------------------------------------------------
  # ● 暗転モード処理
  #--------------------------------------------------------------------------
  def blackout(type = 0, power = 10, max = 100, sprite = nil)
    @tone_power = power
    @tone_type = type
    @tone_max = max
    update_blackout(sprite)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (暗転処理)
  #--------------------------------------------------------------------------
  def update_blackout(sprite)
    case @tone_type
    when 0
      if @tone_rate != -@tone_max
        @tone_rate = [@tone_rate - @tone_power, -@tone_max].max
        sprite.tone.red = @tone_rate
        sprite.tone.green = @tone_rate
        sprite.tone.blue = @tone_rate
      end
    when 1
      if @tone_rate != 0
        @tone_rate = [@tone_rate + @tone_power, 0].min
        sprite.tone.red = @tone_rate
        sprite.tone.green = @tone_rate
        sprite.tone.blue = @tone_rate
      end
    end
  end
end
#==============================================================================
# ■ Object
#------------------------------------------------------------------------------
#  全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。
#==============================================================================

class Object
  #--------------------------------------------------------------------------
  # ● 情報の出力
  #--------------------------------------------------------------------------
  def p2(info)
    # pメソッドを疑似的に前の仕様に戻す
    msgbox(info)
  end
  #--------------------------------------------------------------------------
  # ● 深い複製の作成
  #--------------------------------------------------------------------------
  def dec
    # Marshalもモジュールを経由して、完全な複製を作成
    return Marshal.load(Marshal.dump(self))
  end
end
#==============================================================================
# ■ NilClass
#------------------------------------------------------------------------------
#  nil のクラス。nil は NilClass クラスの唯一のインスタンスです。
#==============================================================================

class NilClass
  #--------------------------------------------------------------------------
  # ● デバイスの取得
  #--------------------------------------------------------------------------
  def to_d
    return "BGM"
  end
end
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
#  文字列クラス。任意の長さのバイト列を扱うことができます。
#==============================================================================

class String
  #--------------------------------------------------------------------------
  # ● デバイスの取得
  #--------------------------------------------------------------------------
  def to_d
    return self
  end
end
#==============================================================================
# ■ Audio
#------------------------------------------------------------------------------
#  ミュージック、サウンドにかかわる処理を行うモジュールです。
#==============================================================================

module Audio
  #--------------------------------------------------------------------------
  # ● 音楽の解放
  #--------------------------------------------------------------------------
  def self.dispose
    #self.bgs_stop
    self.me_stop
    self.bgm_stop
  end
end
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
#  スプライト表示を扱う組み込みクラスです。
#==============================================================================

class Sprite
  #--------------------------------------------------------------------------
  # ● 座標の設定
  #--------------------------------------------------------------------------
  def rect_set(x, y, z = 100)
    self.x = x if x
    self.y = y if y
    self.z = z if z
  end
  #--------------------------------------------------------------------------
  # ● データの取得
  #--------------------------------------------------------------------------
  def data_copy(data)
    return if data.disposed? or self.disposed?
    # 各データをコピー
    self.x = data.x
    self.y = data.y
    self.z = data.z-1
    self.visible = data.visible
    self.ox = data.ox
    self.oy = data.oy
    self.angle = data.angle
    self.mirror = data.mirror
    self.src_rect = data.src_rect.dup
    self.zoom_x = data.zoom_x
    self.zoom_y = data.zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 残像用の複製の作成
  #--------------------------------------------------------------------------
  def blink
    # 各データをコピー
    sprite = Sprite.new(self.viewport)
    sprite.bitmap = self.bitmap.dup if self.bitmap
    sprite.x = self.x
    sprite.y = self.y
    sprite.z = self.z-1
    sprite.visible = false
    sprite.ox = self.ox
    sprite.oy = self.oy
    sprite.angle = self.angle
    sprite.mirror = self.mirror
    sprite.opacity = self.opacity - 95
    sprite.blend_type = 1
    sprite.color = self.color.dup
    sprite.src_rect = self.src_rect.dup
    sprite.zoom_x = self.zoom_x
    sprite.zoom_y = self.zoom_y
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● 複製の作成
  #--------------------------------------------------------------------------
  def dup
    # 各データをコピー
    sprite = Sprite.new(self.viewport)
    sprite.bitmap = self.bitmap.dup if self.bitmap
    sprite.x = self.x
    sprite.y = self.y
    sprite.z = self.z
    sprite.visible = self.visible
    sprite.ox = self.ox
    sprite.oy = self.oy
    sprite.angle = self.angle
    sprite.mirror = self.mirror
    sprite.opacity = self.opacity
    sprite.blend_type = self.blend_type
    sprite.color = self.color.dup
    sprite.src_rect = self.src_rect.dup
    sprite.zoom_x = self.zoom_x
    sprite.zoom_y = self.zoom_y
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● センタリング
  #--------------------------------------------------------------------------
  def centering
    return if self.bitmap == nil
    self.x = (640 - (self.bitmap.width * self.zoom_x)) / 2
    self.y = (480 - (self.bitmap.height * self.zoom_y)) / 2
  end
  #--------------------------------------------------------------------------
  # ● ズーム
  #--------------------------------------------------------------------------
  def zoom=(n)
    zoom_x = n
    zoom_y = n
  end
  #--------------------------------------------------------------------------
  # ● エフェクト表示中判定
  #--------------------------------------------------------------------------
  def effect?
    return false
  end
end
#==============================================================================
# ■ Array
#------------------------------------------------------------------------------
#  配列全般を扱う組み込みクラスです。
#==============================================================================

class Array
  #--------------------------------------------------------------------------
  # ● 要素の一次元化
  #--------------------------------------------------------------------------
  def divide
    array = []
    # データを複製
    data = self.dup
    # 要素の一次元化
    data.each do |i|
      if i.is_a?(Array)
        for a in i
          array.push(a)
        end
      else
        array.push(i)
      end
    end
    return array
  end
  #--------------------------------------------------------------------------
  # ● 要素のシャッフル
  #--------------------------------------------------------------------------
  def shuffle
    # データを複製
    data = self.dup
    # 要素をランダムに並び替える
    data.each_index do |i|
      j = rand(i+1)
      data, data[j] = data[j], data
    end
    return data
  end
  #--------------------------------------------------------------------------
  # ● 要素のシャッフル(破壊的)
  #--------------------------------------------------------------------------
  def shuffle!
    # 要素をランダムに並び替える
    self.each_index do |i|
      j = rand(i+1)
      self, self[j] = self[j], self
    end
  end
  #--------------------------------------------------------------------------
  # ● 要素をランダムに返す
  #--------------------------------------------------------------------------
  def get_rand
    return self[rand(self.size)]
  end
  #--------------------------------------------------------------------------
  # ● 要素の交換
  #    a : 要素1
  #    b : 要素2
  #--------------------------------------------------------------------------
  def change(a, b)
    # データを複製
    data = self.dup
    # 要素を交換する(self自体には変化がない)
    data[a] = self
    data = self[a]
    return data
  end
  #--------------------------------------------------------------------------
  # ● 要素の交換(破壊的)
  #    a : 要素1
  #    b : 要素2
  #--------------------------------------------------------------------------
  def change!(a, b)
    # 要素を交換する(selfを直接書き換える)
    self[a], self = self, self[a]
  end
end
#==============================================================================
# ■ Numeric
#------------------------------------------------------------------------------
#  数値全般を扱う組み込みクラスです。
#==============================================================================

class Numeric
  #--------------------------------------------------------------------------
  # ● 乱数の設定
  #    n : 乱数値
  #--------------------------------------------------------------------------
  def amp(n)
    amp = (self.abs * n / 100).to_min(1)
    return self + rand(amp+1) + rand(amp+1) - amp
  end
  #--------------------------------------------------------------------------
  # ● 値の調整
  #    order : 求められた値
  #    size  : 最大サイズ
  #--------------------------------------------------------------------------
  def select(order, size)
    if self - order <= -1
      return size
    elsif self + order >= size
      return 0
    else
      return self + order
    end
  end
  #--------------------------------------------------------------------------
  # ● 最大値の設定
  #    max : 求められた最大の数値
  #--------------------------------------------------------------------------
  def to_max(min, max)
    if self > max
      return max
    elsif self < min
      return min
    else
      return self
    end
  end
  #--------------------------------------------------------------------------
  # ● 最大値の設定
  #    max : 求められた最大の数値
  #--------------------------------------------------------------------------
  def to_m(max)
    if self > max
      return max
    else
      return self
    end
  end
  #--------------------------------------------------------------------------
  # ● 最小値の設定
  #    min : 求められた最小の数値
  #--------------------------------------------------------------------------
  def to_min(min)
    if self < min
      return min
    else
      return self
    end
  end
  #--------------------------------------------------------------------------
  # ● 範囲内から乱数を得る
  #    min : 求められた最小の数値
  #--------------------------------------------------------------------------
  def mm_rand(min)
    return rand(self - min + 1) + min
  end
  #--------------------------------------------------------------------------
  # ● 求めた数値に対するパーセンテージを返す
  #    order : 求められた数値
  #--------------------------------------------------------------------------
  def rate(order)
    return 100 if order == 0
    return (self * 100) / order
  end
end
#==============================================================================
# ■ Window
#------------------------------------------------------------------------------
#  ゲーム内の全てのウィンドウのスーパークラスです。
#   内部的には複数のスプライトで構成されています。
#==============================================================================

class Window
  #--------------------------------------------------------------------------
  # ● 暗転モード処理
  #--------------------------------------------------------------------------
  def blackout(type = 0, power = 10, max = 100, sprite = @win_viewport)
    @tone_power = power
    @tone_type = type
    @tone_max = max
    update_blackout(sprite)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (暗転処理)
  #--------------------------------------------------------------------------
  def update_blackout(sprite = @win_viewport)
    case @tone_type
    when 0
      if @tone_rate != -@tone_max
        @tone_rate = [@tone_rate - @tone_power, -@tone_max].max
        sprite.tone.red = @tone_rate
        sprite.tone.green = @tone_rate
        sprite.tone.blue = @tone_rate
      end
    when 1
      if @tone_rate != 0
        @tone_rate = [@tone_rate + @tone_power, 0].min
        sprite.tone.red = @tone_rate
        sprite.tone.green = @tone_rate
        sprite.tone.blue = @tone_rate
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウの右寄せ
  #--------------------------------------------------------------------------
  def right(x)
    # ウィンドウを画面の右に配置する
    self.x = (x - self.width)
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウの下寄せ
  #--------------------------------------------------------------------------
  def down(y)
    # ウィンドウを画面の右に配置する
    self.y = (480 - self.height - y)
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウのセンタリング
  #--------------------------------------------------------------------------
  def centering
    # ウィンドウを画面の中央に配置する
    self.x = (640 - self.width)  / 2
    self.y = (480 - self.height) / 2
  end
end[/pre]

老黄鸡

梦石
4
星屑
45705
在线时间
7948 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2018-2-25 10:34:10 | 显示全部楼层
我这里没有素材,就不测试了。
尝试将295行
  1. def initialize(character, event_name)
  2.   super()
复制代码

改成
  1. def initialize(character, event_name,vp)
  2.   super(vp)
复制代码


然后把140行
  1. @light_sprite = Light_Sprite.new(self, id)
复制代码

改成
  1. @light_sprite = Light_Sprite.new(self, id,self.viewport)
复制代码

评分

参与人数 1赞 +1 收起 理由
火锅深处 + 1 覆盖问题完美解决,但好像变暗和模糊了,还.

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 1 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部