查看: 2386|回复: 6

[已经解决] 怎样做一个完美的镜像事件?

[复制链接]
梦石
0
星屑
1540
在线时间
309 小时
注册时间
2011-7-23
回帖
143
发表于 2014-8-11 15:21:30 | 显示全部楼层 |阅读模式

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

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

×
想做一个镜像的效果 角色动镜像也会动
但是如果是用按钮被按下时移动的话 镜像和角色的移动很容易就不同步了 怎么解决 - -


梦石
0
星屑
50
在线时间
269 小时
注册时间
2014-5-9
回帖
124

开拓者

发表于 2014-8-11 19:11:22 | 显示全部楼层
泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
回复

使用道具 举报

梦石
0
星屑
1540
在线时间
309 小时
注册时间
2011-7-23
回帖
143
 楼主| 发表于 2014-8-11 19:44:30 | 显示全部楼层
泉塚四季 发表于 2014-8-11 19:11
https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id=13465

return unless $game_variables[M5MoveTogether::VAR].is_a?(Array)

为什么这一行会报错?除了变量那个我改成VAR=11以外就没动了

点评

请问报错内容是什么呢?  发表于 2014-8-11 21:41
难道是把VAR或者M5MoveTogether 改掉了,然后这行报错?  发表于 2014-8-11 20:24
……这行怎么看都不像是能报错的样子…… 报什么错?  发表于 2014-8-11 20:13
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-9-19 13:03:27 | 显示全部楼层
如果你会PS的话,不妨看看这个VA镜像脚本
回复

使用道具 举报

梦石
0
星屑
124
在线时间
900 小时
注册时间
2012-11-13
回帖
845
发表于 2014-9-20 10:02:27 | 显示全部楼层
镜像脚本

[pre lang="rgss" line="1"]#◆◇◆◇◆  鏡床スクリプトVXA ver 1.00  ◇◆◇◆◇
#  サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
#   by みんと

=begin

■ 更新履歴

○ ver 1.00(2010/11/23)
公開
  
■ 説明

現在キャラクターが立っている
「一歩下」のタイルが、特定のタイルだった場合、
一歩下のタイルにキャラクターの半透明の映像を映し出します。
水面などの演出に向いています。

鏡床とみなされるタイルの登録には地形タグを使用します。
タイルセットの地形タグを任意の値に設定してください。

イベントの場合は、「最初の」実行内容が
「注釈」で、注釈の内容が 鏡床描写 のみの場合、同様に映し出します。
設定していない場合は映し出さないので、
映し出したいイベントにだけ設定してください。

導入場所の注意
エイリアスで構成されていますので、
出来るだけ下のほうに導入してください。

=end

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

module MINTO
  
  # 鏡床スクリプトVXを有効化 ( true で有効 / false で無効 )
  RGSS["鏡床スクリプトVX"] = true
  
  # 鏡床のタイルとして扱う地形タグのID
  # キャラクターが立っている一歩下のレイヤー1~3の中で、
  # 1つでも該当する地形タグがあれば鏡床を作成します
  Mirror_Tile_ID = 1
  
  # 鏡床無効のタイルとして扱う地形タグのID
  # キャラクターが立っている一歩下のレイヤー1~3の中で、
  # 1つでも該当する地形タグがあれば鏡床を無効化します
  # 無効化タイルを使用しない場合は nil を収納してください
  Not_Mirror_Tile_ID = 2
  
  # 機能を一時的に無効化するスイッチ
  # このスイッチが オン の時、機能を無効化します
  Not_Mirror_Switch = 0
  
end

# 鏡床スクリプトVXが有効な場合に以降の処理を実行する
if MINTO::RGSS["鏡床スクリプトVX"] == true then
  
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
#  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
# このクラスのインスタンスは $game_map で参照されます。
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :map                      # マップの情報
  #--------------------------------------------------------------------------
  # ● 地形タグの取得
  #    x   : 指定 X 座標
  #    y   : 指定 Y 座標
  #    tag : 指定地形タグ
  #--------------------------------------------------------------------------
  def terrain_tag_include?(x, y, tag)
    # 無効なタイルの場合
    unless valid?(x, y)
      # メソッドを返す
      return false
    end
    # 全レイヤーを検索
    for tile_id in layered_tiles(x, y) do
      # タグを取得
      t = tileset.flags[tile_id] >> 12
      # 地系タグが一致した場合
      if tag == t
        # メソッドを返す
        return true
      end
    end
    # メソッドを返す
    return false
  end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
#  キャラクター表示用のスプライトです。
#   Game_Character クラスのインスタンスを監視し、
#   スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 解放
  #    alias : dispose_MINTO_Mirror_Tile
  #--------------------------------------------------------------------------
  alias :dispose_MINTO_Mirror_Tile :dispose
  def dispose
    # 鏡床が存在する場合
    if @mirror_tile_sprite != nil then
      # 鏡床を解放
      @mirror_tile_sprite.bitmap.dispose
      @mirror_tile_sprite.dispose
    end
    # 元の処理を実行
    dispose_MINTO_Mirror_Tile
  end
  #--------------------------------------------------------------------------
  # ● 鏡床有効判定
  #    x  : X 座標
  #    y  : Y 座標
  #--------------------------------------------------------------------------
  def mirror_tile_include?(x, y)
    # 目標のタイルが鏡床の場合
    if $game_map.terrain_tag_include?(x, y, MINTO::Mirror_Tile_ID)
      # 鏡床無効化タイルが有効な場合
      unless MINTO::Not_Mirror_Tile_ID.nil?
        # 鏡床が無効化されていない場合
        unless $game_map.terrain_tag_include?(x, y, MINTO::Not_Mirror_Tile_ID)
          # メソッドを返す
          return true
        end
      # 無効化タイルを使用していない場合
      else
        # メソッドを返す
        return true
      end
    end
    # メソッドを返す
    return false
  end
  #--------------------------------------------------------------------------
  # ● 鏡床の作成
  #--------------------------------------------------------------------------
  def mirror_tile_set
    # 鏡床が存在する場合
    if @mirror_tile_sprite != nil then
      # 鏡床を解放
      @mirror_tile_sprite.bitmap.dispose
      @mirror_tile_sprite.bitmap = nil
      @mirror_tile_sprite.dispose
      @mirror_tile_sprite = nil
    end
    # 最終ファイル名を更新
    @last_tile_id = @character.tile_id
    @last_character_name = @character.character_name.dup
    # 鏡床用のスプライトを生成
    @mirror_tile_sprite = self.dup
    # 座標を調節する
    @mirror_tile_sprite.y = self.y - (self.oy / 6)
    @mirror_tile_sprite.z = self.z
    # 色を白っぽくする
    @mirror_tile_sprite.tone.red = 64
    @mirror_tile_sprite.tone.green = 64
    @mirror_tile_sprite.tone.blue = 64
    # 半透明にする
    @mirror_tile_sprite.opacity = self.opacity * 62 / 100
    # 180度回転させる
    @mirror_tile_sprite.angle = 180
    # 左右を反転させる
    @mirror_tile_sprite.mirror = (not self.mirror == true)
  end
  #--------------------------------------------------------------------------
  # ● 鏡床の更新
  #--------------------------------------------------------------------------
  def update_mirror_tile
    # キャラクターの現在位置を取得
    x = @character.x
    y = @character.y
    # 元々鏡床が存在しない場合
    if @mirror_tile_sprite == nil then
      # メソッドを返す
      return
    end
    # 機能が無効化されている場合
    if $game_switches[MINTO::Not_Mirror_Switch] == true then
      # 不可視状態にする
      @mirror_tile_sprite.visible = false
      # メソッドを返す
      return
    end
    # プレイヤーの場合
    unless @character.is_a?(Game_Event) then
      # 機能が無効化されている場合
      if $game_map.airship.driving == true then
        # 不可視状態にする
        @mirror_tile_sprite.visible = false
        # メソッドを返す
        return
      end
    end
    # 下のタイルが鏡床以外の場合
    if mirror_tile_include?(x, (y + 1)) == false then
      # 鏡床を不可視状態にする
      @mirror_tile_sprite.visible = false
      # メソッドを返す
      return
    # 下のタイルが鏡床の場合
    else
      # Y座標補正値を初期化する
      @y_plus = 6
      #@mirror_tile_sprite.wave_amp = 1
      #@mirror_tile_sprite.wave_length = 60
      #@mirror_tile_sprite.wave_speed = 320
    end
    # 各情報を更新する
    @mirror_tile_sprite.src_rect = self.src_rect.dup
    @mirror_tile_sprite.x = self.x
    @mirror_tile_sprite.y = self.y - (self.oy / 6) + @y_plus
    @mirror_tile_sprite.opacity = self.opacity * 62 / 100
    @mirror_tile_sprite.z = self.z - 1
    @mirror_tile_sprite.visible = self.visible
    @mirror_tile_sprite.update
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #    alias : update_MINTO_Mirror_Tile
  #--------------------------------------------------------------------------
  alias :update_MINTO_Mirror_Tile :update
  def update
    # ファイル名、色相のどれかが現在のものと異なる場合
    if @last_tile_id != @character.tile_id or
      @last_character_name != @character.character_name
      # 鏡床が存在する場合
      if @mirror_tile_sprite != nil then
        # 元の処理を実行
        update_MINTO_Mirror_Tile
        # 鏡床を再作成
        mirror_tile_set
        # 鏡床を更新
        update_mirror_tile
        # メソッドを返す
        return
      end
    end
    # 元の処理を実行
    update_MINTO_Mirror_Tile
    # まだ鏡床を作成していない場合
    if @mirror_tile == nil then
      # キャラクターがイベントの場合
      if @character.is_a?(Game_Event) == true then
        # 有効なイベントの場合
        if @character.list != nil then
          # 最初の内容が注釈の場合
          if @character.list[0].code == 108 then
            # 注釈の内容が「鏡床描写」だった場合
            if @character.list[0].parameters == ["鏡床描写"] then
              # 鏡床を作成
              mirror_tile_set
              # 作成済みフラグをオン
              @mirror_tile = true
            end
          end
        end
      # キャラクターがプレイヤーの場合
      else
        # 鏡床を作成
        mirror_tile_set
        # 作成済みフラグをオン
        @mirror_tile = true
      end
    end
    # 鏡床を更新
    update_mirror_tile
  end
end

end
[/pre]
[pre lang="rgss" line="1"]#◆◇◆◇◆  鏡の壁スクリプトVXA ver 1.00  ◇◆◇◆◇
#  サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
#   by みんと

=begin

■ 更新履歴

○ ver 1.00(2010/11/28)
公開
  
■ 説明

鏡床スクリプトVX専用の拡張スクリプトです。
このスクリプト素材を使用する場合は、
鏡床スクリプトVXが必須となります。

キャラクターの「一歩上」のタイルが特定のタイルだった場合、
そのタイルにキャラクターの鏡写し映像を描写します。

イベントの場合は、鏡床スクリプトのものをそのまま継承します。

氷のダンジョン等に向いているかもしれません。

鏡の壁とみなされるタイルの登録には、専用のマップを別に使います。
詳しい設定方法はスクリーンショットを参照してください。

◆ 鏡の壁イベントの設定

鏡の壁とみなすイベントには、
まず移動タイプを 固定 にし、
名前に 鏡 の文字を含ませてください。
そのイベントは鏡の壁とみなされます。
(途中でそのイベントを動かしても、
鏡の壁の判定は更新されません。
あくまで絶対に動かないイベント専用の機能です)

導入場所の注意
エイリアスで構成されていますので、
出来るだけ下のほうに導入してください。

=end

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

module MINTO
  
  # 鏡の壁スクリプトVXAを有効化 ( true で有効 / false で無効 )
  RGSS["鏡の壁スクリプトVXA"] = true
  
  # 鏡の壁タイルとして扱う地形タグのID
  # キャラクターが立っている一歩上のレイヤー1~3の中で、
  # 1つでも該当する地形タグがあれば鏡の壁を作成します
  Mirror_Wall_ID = 3
  
  # 鏡の壁無効化タイルとして扱う地形タグのID
  # キャラクターが立っている一歩上のレイヤー1~3の中で、
  # 1つでも該当する地形タグがあれば鏡の壁を無効化します
  # 無効化タイルを使用しない場合は nil を収納してください
  Not_Mirror_Wall_ID = nil

  
  # 機能を一時的に無効化するスイッチ
  # このスイッチが オン の時、機能を無効化します
  Not_MirrorWall_Switch = 0
  
end

# 鏡の壁スクリプトVXAが有効な場合に以降の処理を実行する
if MINTO::RGSS["鏡の壁スクリプトVXA"] == true then
  
#==============================================================================
# ■ Game_Character (分割定義 1)
#------------------------------------------------------------------------------
#  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。
#==============================================================================

class Game_Character
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :move_type                # 移動タイプ
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
#  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :event                    # イベント
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
#  マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :mirror_wall              # 鏡の壁イベントの位置情報
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    alias : initialize_Mirror_Wall
  #--------------------------------------------------------------------------
  alias :initialize_Mirror_Wall :initialize
  def initialize
    # 鏡の壁イベントの位置情報を定義
    @mirror_wall = Table.new($game_map.map.width, $game_map.map.height)
    # 元の処理を実行
    initialize_Mirror_Wall
    # ループ処理
    for character in @character_sprites do
      # キャラクターがイベントの場合
      if character.character.class == Game_Event then
        # キャラクターの移動タイプが固定の場合
        if character.character.move_type == 0 then
          # イベント名に 鏡 が含まれる場合
          if character.character.event.name.include?("鏡") == true then
            # 位置を取得
            x = character.character.x
            y = character.character.y
            # 位置を保存
            @mirror_wall[x, y] = 1
          end
        end
      end
    end
  end
end
#==============================================================================
# ■ Sprite_Character (分割定義 2)
#------------------------------------------------------------------------------
#  キャラクター表示用のスプライトです。
# Game_Character クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 解放
  #    alias : dispose_Mirror_Wall
  #--------------------------------------------------------------------------
  alias :dispose_Mirror_Wall :dispose
  def dispose
    # 鏡が存在する場合
    if @mirror_sprite != nil then
      # 鏡を解放
      @mirror_sprite.bitmap.dispose
      @mirror_sprite.dispose
    end
    # 元の処理を実行
    dispose_Mirror_Wall
  end
  #--------------------------------------------------------------------------
  # ● 鏡床の作成
  #    alias : mirror_tile_set_Mirror_Wall
  #--------------------------------------------------------------------------
  alias :mirror_tile_set_Mirror_Wall :mirror_tile_set
  def mirror_tile_set
    # 元の処理を実行
    mirror_tile_set_Mirror_Wall
    # 鏡を作成
    mirror_set
  end
  #--------------------------------------------------------------------------
  # ● 鏡の作成
  #--------------------------------------------------------------------------
  def mirror_set
    # 鏡用のスプライトを生成
    @mirror_sprite = self.dup
    # 座標を調節する
    @mirror_sprite.y = self.y + (self.oy / 6)
    @mirror_sprite.z = self.z
    # 色を白っぽくする
    @mirror_sprite.tone.red = 64
    @mirror_sprite.tone.green = 64
    @mirror_sprite.tone.blue = 64
    # 不透明にする
    @mirror_sprite.opacity = 0
    # 左右を反転させる
    @mirror_sprite.mirror = (self.mirror == false)
    # タイル ID が有効な値の場合
    if @tile_id >= 1 then
      # メソッドを返す
      return
    end
    # キャラクターの向きに応じて分岐
    case @character.direction
    # 下
    when 2 then
      direction = 8
    # 左
    when 4 then
      direction = 6
    # 右
    when 6 then
      direction = 4
    # 上
    when 8 then
      direction = 2
    end
    index = @character.character_index
    pattern = @character.pattern < 3 ? @character.pattern : 1
    sx = (index % 4 * 3 + pattern) * @cw
    sy = (index / 4 * 4 + (direction - 2) / 2) * @ch
    @mirror_sprite.src_rect.set(sx, sy, @cw, @ch)
  end
  #--------------------------------------------------------------------------
  # ● 鏡の壁有効判定
  #    x : X 座標
  #    y : Y 座標
  #--------------------------------------------------------------------------
  def mirror_wall_include?(x, y)
    # 目標のタイルが鏡の壁の場合
    if $game_map.terrain_tag_include?(x, y, MINTO::Mirror_Wall_ID)
      # 鏡の壁無効化タイルが有効な場合
      unless MINTO::Not_Mirror_Wall_ID.nil?
        # 鏡の壁が無効化されていない場合
        unless $game_map.terrain_tag_include?(x, y, MINTO::Not_Mirror_Wall_ID)
          # メソッドを返す
          return true
        end
      # 無効化タイルを使用していない場合
      else
        # メソッドを返す
        return true
      end
    end
    # メソッドを返す
    return false
  end
  #--------------------------------------------------------------------------
  # ● 影の更新
  #    alias : update_mirror_tile_Mirror_Wall
  #--------------------------------------------------------------------------
  alias :update_mirror_tile_Mirror_Wall :update_mirror_tile
  def update_mirror_tile
    # 元の処理を実行
    update_mirror_tile_Mirror_Wall
    # 鏡を更新
    update_mirror
  end
  #--------------------------------------------------------------------------
  # ● 鏡の更新
  #--------------------------------------------------------------------------
  def update_mirror
    # 現在の位置を取得
    x = @character.x
    y = @character.y
    @z_plus = -1
    # 元々鏡が存在しない場合
    if @mirror_sprite == nil then
      # 処理を終了
      return
    end
    # 機能が無効化されている場合
    if $game_switches[MINTO::Not_MirrorWall_Switch] == true then
      # 不可視状態にする
      @mirror_sprite.visible = false
      # メソッドを返す
      return
    end
    # マップで無い場合
    unless SceneManager.scene.is_a?(Scene_Map)
      # メソッドを返す
      return
    end
    # スプライトセットの有効判定
    effective = (SceneManager.scene.spriteset != nil)
    # スプライトセットが有効で、且つ一歩上に鏡の壁イベントが存在する場合
    if effective and SceneManager.scene.spriteset.mirror_wall[x, y-1] == 1 then
      # Y座標補正値を初期化する
      @y_plus = -48
      # 透明度を調節
      @mirror_sprite.opacity = (@mirror_sprite.opacity + 6).to_m(160)
      @z_plus = 999
      #@mirror_sprite.wave_amp = 1
      #@mirror_sprite.wave_length = 40
      #@mirror_sprite.wave_speed = 320
    # 一歩上のタイルが鏡の壁以外の場合
    elsif mirror_wall_include?(x, (y - 1)) == false then
      # 不透明にする
      @mirror_sprite.opacity = 0
      # 鏡を不可視状態にする
      @mirror_sprite.visible = false
      #@mirror_sprite.wave_amp = 0
      #@mirror_sprite.wave_length = 0
      #@mirror_sprite.wave_speed = 0
      # 処理を終了
      return
    # 一歩上のタイルが鏡の壁の場合
    else
      # Y座標補正値を初期化する
      @y_plus = -32
      # 透明度を調節
      @mirror_sprite.opacity = (@mirror_sprite.opacity + 6).to_m(160)
      #@mirror_sprite.wave_amp = 0
      #@mirror_sprite.wave_length = 0
      #@mirror_sprite.wave_speed = 0
    end
    # タイル ID が有効な値の場合
    if @tile_id >= 1 then
      # 各情報を更新する
      @mirror_sprite.src_rect = self.src_rect
      @mirror_sprite.x = self.x
      @mirror_sprite.y = self.y + (self.oy / 6) + @y_plus
      @mirror_sprite.z = self.z - 1
      @mirror_sprite.visible = self.visible
      # メソッドを返す
      return
    end
    # キャラクターの向きに応じて分岐
    case @character.direction
    # 下
    when 2 then
      direction = 8
    # 左
    when 4 then
      direction = 6
    # 右
    when 6 then
      direction = 4
    # 上
    when 8 then
      direction = 2
    end
    # 各情報を更新する
    index = @character.character_index
    pattern = @character.pattern < 3 ? @character.pattern : 1
    sx = (index % 4 * 3 + pattern) * @cw
    sy = (index / 4 * 4 + (direction - 2) / 2) * @ch
    @mirror_sprite.src_rect.set(sx, sy, @cw, @ch)
    @mirror_sprite.x = self.x
    @mirror_sprite.y = self.y + (self.oy / 6) + @y_plus
    @mirror_sprite.z = self.z + @z_plus
    @mirror_sprite.visible = self.visible
    @mirror_sprite.update
  end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :spriteset                  # スプライトセット
end

end
[/pre]
废弃
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2014-9-20 10:45:39 | 显示全部楼层
本帖最后由 tseyik 于 2014-9-20 10:48 编辑

http://galvs-scripts.com/2013/02/21/character-effects/
00-00 (1) (1).jpg
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-9-20 12:09:07 | 显示全部楼层
墓雷 发表于 2014-8-11 02:44
return unless $game_variables[M5MoveTogether::VAR].is_a?(Array)

为什么这一行会报错?除了变量那个 ...

变量用1试试看
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部