| 
 
| 赞 | 0 |  
| VIP | 46 |  
| 好人卡 | 26 |  
| 积分 | 6 |  
| 经验 | 76056 |  
| 最后登录 | 2023-9-17 |  
| 在线时间 | 2656 小时 |  
 Lv2.观梦者 
	梦石0 星屑618 在线时间2656 小时注册时间2010-6-28帖子1361 
 | 
| 本帖最后由 我的米呀 于 2011-12-1 17:11 编辑 
 脚本本体:
 ================================================================复制代码#==============================================================================
# ★RGSS2 
# STR39_キャラクター残像演出VX v0.8 08/07/28
# 
# ◇必須スクリプト STEMB_マップエフェクトベース
# ・キャラクタースプライトに残像を発生させます。
# ・連続で発生させる場合は並列処理のイベントに貼り付ける等してください。
#
if false
# 以下をコマンドのスクリプト等に貼り付けて残像発生
ef = $game_temp.streffect
id  = 0      # イベントID(0でプレイヤー)
sp  = 20     # 表示時間(1/60sec)
op  = 192    # 透明度(0で元の透明度の66%)
bl  = 1      # 合成方法(0=通常,1=加算,2=減算)
xyz = [0,0,0]# 座標修正[x,y,z]通常は0
ef.push(CharaShadow00.new(id,sp,op,bl,xyz))
# 解説なしタイプ
id=0;sp=20;op=192;bl=1;xyz=[0,0,0]
ef = $game_temp.streffect
ef.push(CharaShadow00.new(id,sp,op,bl,xyz))
# ここまで
end
#==============================================================================
# ★このスクリプトの機能を有効にする
if true
#==============================================================================
# ■ CharaShadow00
#==============================================================================
class CharaShadow00 < Sprite
  # 透明度を0にした時の透明度修正
  AUTO = 0.66
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(id=0,sp=20,op=192,bl=1,xyz=[0,0,0])
    super()
    # 対象のキャラクターの決定
    if id != 0
      chara = $game_map.events[id]
    else
      chara = $game_player
    end
    # XYZ座標の設定
    @rx = chara.real_x
    @ry = chara.real_y_cs
    @xyz = xyz
    @xyz[1] -= 4 unless chara.object?
    self.z = chara.screen_z - 1 + @xyz[2]
    # 透明度・表示時間・合成方法
    if op != 0
      @opacity = op
    else
      @opacity = chara.opacity * AUTO
    end
    self.opacity = @opacity
    @speed = @opacity * 1.0 / sp
    self.blend_type = bl
    # いろいろ設定・更新
    set(chara, self)
    update
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    self.x = ($game_map.adjust_x(@rx) + 8007) / 8 - 1000 + 16 + @xyz[0]
    self.y = ($game_map.adjust_y(@ry) + 8007) / 8 - 1000 + 32 + @xyz[1]
    self.opacity = @opacity
    @opacity -= @speed
    dispose if self.opacity <= 0 # 透明になったら解放
  end
  #--------------------------------------------------------------------------
  # ● いろいろ設定
  #--------------------------------------------------------------------------
  def set(chara, sprite)
    tile_id = chara.tile_id
    if tile_id > 0
      sprite.bitmap = tileset_bitmap(tile_id)
      sprite.src_rect.set((tile_id / 128 % 2 * 8 + tile_id % 8) * 32,
                           tile_id % 256 / 8 % 16 * 32, 32, 32)
      sprite.ox = 16 ; sprite.oy = 32
    else
      character_name = chara.character_name
      sprite.bitmap = Cache.character(character_name)
      sign = character_name[/^[\!\$]./]
      if sign != nil and sign.include?(')
        cw = sprite.bitmap.width / 3  ; ch = sprite.bitmap.height / 4
      else
        cw = sprite.bitmap.width / 12 ; ch = sprite.bitmap.height / 8
      end
      sprite.ox = cw / 2 ; sprite.oy = ch
      index = chara.character_index
      pattern = chara.pattern < 3 ? chara.pattern : 1
      sprite.src_rect.set((index % 4 * 3 + pattern) * cw,
                          (index / 4 * 4 + (chara.direction - 2) / 2) * ch,
                          cw, ch)
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定されたタイルが含まれるタイルセット画像の取得
  #--------------------------------------------------------------------------
  def tileset_bitmap(tile_id)
    set_number = tile_id / 256
    return Cache.system("TileB") if set_number == 0
    return Cache.system("TileC") if set_number == 1
    return Cache.system("TileD") if set_number == 2
    return Cache.system("TileE") if set_number == 3
    return nil
  end
end
#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # ● 画面 Y 座標の取得(追加)
  #--------------------------------------------------------------------------
  def real_y_cs
    if jumping?
      if @jump_count >= @jump_peak
        n = @jump_count - @jump_peak
      else
        n = @jump_peak - @jump_count
      end
      return @real_y - (@jump_peak * @jump_peak - n * n) * 4
    else
      return @real_y
    end
  end
end
#
end
事件中用此脚本,并行后出现残影。
 ========================================================================复制代码id=0;sp=20;op=192;bl=1;xyz=[0,0,0]
ef = $game_temp.streffect
ef.push(CharaShadow00.new(id,sp,op,bl,xyz))
忘记了= =补上,在脚本本体前先插入这个脚本
 复制代码#==============================================================================
# ★RGSS2 
# STEMB_マップエフェクトベース v0.8
# 
# ・エフェクト表示のための配列定義、フレーム更新、ビューポート関連付け
#
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :streffect
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_stref initialize
  def initialize
    initialize_stref
    @streffect = []
  end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● エフェクトの作成
  #--------------------------------------------------------------------------
  def create_streffect
    $game_temp.streffect = []
  end
  #--------------------------------------------------------------------------
  # ● エフェクトの解放
  #--------------------------------------------------------------------------
  def dispose_streffect
    for i in 0...$game_temp.streffect.size
      $game_temp.streffect[i].dispose if $game_temp.streffect[i] != nil
    end
    $game_temp.streffect = []
  end
  #--------------------------------------------------------------------------
  # ● エフェクトの更新
  #--------------------------------------------------------------------------
  def update_streffect
    for i in 0...$game_temp.streffect.size
      if $game_temp.streffect[i] != nil
        $game_temp.streffect[i].viewport = @viewport1
        $game_temp.streffect[i].update
        $game_temp.streffect.delete_at(i) if $game_temp.streffect[i].disposed?
      end
    end
  end
  #--------------------------------------------------------------------------
  # ★ エイリアス
  #--------------------------------------------------------------------------
  alias create_parallax_stref create_parallax
  def create_parallax
    create_parallax_stref
    create_streffect
  end
  alias dispose_stref dispose
  def dispose
    dispose_streffect
    dispose_stref
  end
  alias update_stref update
  def update
    update_stref
    update_streffect
  end
end
 | 
 |