查看: 2119|回复: 1

[已经解决] 水面倒影不能即使更新行走图【已经解决】

[复制链接]
梦石
0
星屑
176
在线时间
359 小时
注册时间
2015-3-29
回帖
104
发表于 2015-7-11 16:08:20 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Coder7447 于 2015-7-14 19:53 编辑

我用了水面倒影脚本制作ARPG

但是人物从普通行走图更换到攻击行走图 水面的倒影仍然是普通行走图

请问如何解决

脚本如下:
[pre lang="ruby"]=================================

module MINTO
  
  # 鏡床スクリプトを有効化 ( true で有効 / false で無効 )
  #RGSS["Mirror_Tile"] = true
  RGSS_SZ_A = true
end

#if MINTO::RGSS["Mirror_Tile"] == true then
if MINTO::RGSS_SZ_A == true then

#==============================================================================
# ☆ カスタマイズ
#------------------------------------------------------------------------------
#   機能のカスタマイズを行うモジュールです。
#==============================================================================

module MINTO
  
  # 鏡床のタイルとして扱う地形タグのID
  Mirror_Tile_ID = 1
  
end
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
#  スプライト表示を扱う組み込みクラスです。
#==============================================================================

class Sprite
  #--------------------------------------------------------------------------
  # ● 複製の作成
  #--------------------------------------------------------------------------
  def dup
    # 各データをコピー
    sprite = Sprite.new(self.viewport)
    sprite.bitmap = 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 + 10 #- 5
    sprite.angle = self.angle
    sprite.mirror = self.mirror
    sprite.opacity = self.opacity
    sprite.blend_type = self.blend_type
    sprite.color = self.color
    rect = self.src_rect
    sprite.src_rect.set(rect.x, rect.y, rect.width, rect.height)
    sprite.zoom_x = 1#1#self.zoom_x
    sprite.zoom_y = 1.1#self.zoom_y
    #rate = 0.8#1#.2
    #self.zoom_x = 0.8
    #self.zoom_y = 0.8#rate  
    return sprite
  end
end
#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
#  キャラクター表示用のスプライトです。
#   Game_Character クラスのインスタンスを監視し、
#   スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Character < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    # 影が存在する場合
    if @shadow_sprite != nil then
      # 影を解放
      @shadow_sprite.bitmap.dispose
      @shadow_sprite.dispose
    end
    # スーパークラスを実行
    super
  end
  #--------------------------------------------------------------------------
  # ● 地形タグの取得
  #--------------------------------------------------------------------------
  def terrain_tag(x, y)
    # 地形タグの情報を返す
    return $game_map.terrain_tag(x, y)
  end
  #--------------------------------------------------------------------------
  # ● 影の作成
  #--------------------------------------------------------------------------
  def shadow_set
    # 影用のスプライトを生成
    @shadow_sprite = self.dup
    # 座標を調節する
    @shadow_sprite.y = self.y - (self.oy / 6)
    @shadow_sprite.z = self.z
    # 色を白っぽくする
    @shadow_sprite.tone.red = 64
    @shadow_sprite.tone.green = 64
    @shadow_sprite.tone.blue = 64
    # 半透明にする
    @shadow_sprite.opacity = 160
    # 180度回転させる
    @shadow_sprite.angle = 180
    # 左右を反転させる
    @shadow_sprite.mirror = (not self.mirror == true)
  end
  #--------------------------------------------------------------------------
  # ● 影の更新
  #--------------------------------------------------------------------------
  def update_shadow
    # キャラクターの現在位置を取得
    x = @character.x
    y = @character.y
    # 元々影が存在しない場合
    if @shadow_sprite == nil then
      # 処理を終了
      return
    end
    # 下のタイルの地形タグのIDが Mirror_Tile_ID 以外の場合
    if ( terrain_tag(x, y+1) != MINTO::Mirror_Tile_ID or  terrain_tag(x, y+1) == 2 ) then
      # 影を不可視状態にする
      @shadow_sprite.visible = false
      # 処理を終了
      return
    # 下のタイルの地形タグのIDが Mirror_Tile_ID の場合
    else
      # Y座標補正値を初期化する
      @y_plus = 0
       if @character.name.include?("NotShadow")
            @shadow_sprite.visible = false
            return
         end
    end
    # 各情報を更新する
    rect = self.src_rect
    @shadow_sprite.src_rect.set(rect.x, rect.y, rect.width, rect.height)
    @shadow_sprite.x = self.x
    @shadow_sprite.y = self.y - (self.oy / 6) + @y_plus + 10
    @shadow_sprite.opacity = self.opacity - 95
    @shadow_sprite.z = self.z - 1
    @shadow_sprite.visible = self.visible
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #    alias : update_MINTO_Mirror_Tile
  #--------------------------------------------------------------------------
  alias update_MINTO_Mirror_Tile update
  def update
    # 元の処理を実行
    update_MINTO_Mirror_Tile
    # まだ影を作成していない場合
    if @shadow == 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
              # 影を作成
              shadow_set
              # 作成済みフラグをオン
              @shadow = true
           # end
         # end
        end
      # キャラクターがプレイヤーの場合
      else
        # 影を作成
        shadow_set
        # 作成済みフラグをオン
        @shadow = true
      end
    end
    # 影を更新
    update_shadow
  end
end

end
[/pre]  
在内存有限的时光里, 容纳未见的可能。

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2015-7-11 17:49:25 | 显示全部楼层
本帖最后由 恐惧剑刃 于 2015-7-11 17:50 编辑

def update_shadow下面加上
  1. if self.bitmap != @shadow_sprite.bitmap
  2.       @shadow_sprite.dispose
  3.       @shadow_sprite = nil
  4.       shadow_set
  5.     end
复制代码

点评

完美解决了 ~ O(∩_∩)~~~ 撒花~~~赞~~~~谢谢剑大~~  发表于 2015-7-11 20:18

评分

参与人数 1星屑 +150 收起 理由
RyanBern + 150 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部