Accueil du SiteAccueil du Site  AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  ConnexionConnexion  S'enregistrerS'enregistrer  



Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

Partagez
 

 Effet de chaleur

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Kingdommangas
Ninja (niveau 4)
Ninja (niveau 4)
Kingdommangas

Féminin
Messages postés : 210
Date d'inscription : 19/12/2015
Jauge LPC :
Effet de chaleur 891527140057 / 10057 / 100Effet de chaleur 8915271400

Effet de chaleur Partag10
Effet de chaleur Riche_10
Effet de chaleur Collec10
Effet de chaleur Collec11
Effet de chaleur Collec12

Effet de chaleur Empty
MessageSujet: Effet de chaleur   Effet de chaleur EmptyLun 28 Déc 2015 - 13:10

Un piti script sympas pour onduler l'écran.

Code:
=begin
      RGSS3
      
   ★ 陽炎 ★

      マップにゆらゆらと歪む陽炎のようなエフェクトをかけます。
      砂漠や火山のマップにどうぞ。
      
      ● 使い方 ●========================================================
      設定箇所に陽炎エフェクトを表示させるマップIDを設定してください。
      ====================================================================
      
      ● 仕様 ●==========================================================
      陽炎のエフェクトがかかる対象は原則、マップチップのみとなります。
      --------------------------------------------------------------------
      遠景およびイベントは歪みの対象から外れます。
      例外としてイベント名に「#置物」という文字列を含んでいるイベントは、
      歪みの対象に含めることが出来ます。
      ただしこの置物設定は、画像の変化のないイベント且つ、
      移動することのないイベントに限り行うようにしてください。
      --------------------------------------------------------------------
      また、ループ設定のされているマップには対応していません。
      --------------------------------------------------------------------
      陽炎エフェクトを表示するマップへ移動する際、
      若干の読み込み時間がかかりますのでご了承ください。
      ====================================================================
      
      ver1.00
      
      Last Update : 2015/10/05
      10/05 : 新規
      
      ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end

#===========================================
#   設定箇所
#===========================================
module HEAT_HAZE
  # 陽炎エフェクトを有効化するマップIDを配列で設定
  MAP_ID = [1,5]
end
#===========================================
#   ここまで
#===========================================

$rsi ||= {}
$rsi["陽炎"] = true

class RPG::Event
  def heat_haze_target?
    @hht ||= self.name.include?("#置物")
    @hht
  end
end

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :heat_haze_bitmap
  attr_reader :heat_haze_parameters
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias heat_haze_initialize initialize
  def initialize
    heat_haze_initialize
    @heat_haze_bitmap = nil
    @heat_haze_parameters = [rand(51)+40, rand(2).zero?, 0]
  end
end

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 陽炎で歪ませる対象に含めるイベントであるか
  #--------------------------------------------------------------------------
  def heat_haze_target?
    @event.heat_haze_target?
  end
end

class Heat_Haze
  #--------------------------------------------------------------------------
  # ● インクルード HEAT_HAZE
  #--------------------------------------------------------------------------
  include HEAT_HAZE
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :viewport
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(owner)
    @owner = owner
    @viewport = nil
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    dispose if @heat_haze_sprite
    if MAP_ID.include?($game_map.map_id)
      create_heat_haze_map unless $game_temp.heat_haze_bitmap
      create_heat_haze
      dispose_heat_haze_map if @tilemap
    end
  end
  #--------------------------------------------------------------------------
  # ● 陽炎作成用のマップを作成
  #--------------------------------------------------------------------------
  def create_heat_haze_map
    create_tilemap
    create_characters
  end
  #--------------------------------------------------------------------------
  # ● タイルマップの作成
  #--------------------------------------------------------------------------
  def create_tilemap
    @tilemap = Tilemap.new(Viewport.new)
    @tilemap.map_data = $game_map.data
    load_tileset
  end
  #--------------------------------------------------------------------------
  # ● キャラクタースプライトの作成
  #--------------------------------------------------------------------------
  def create_characters
    @character_sprites = []
    $game_map.events.values.each{|event|
      if event.heat_haze_target?
        sprite = Sprite_Character.new(@tilemap.viewport, event)
        sprite.update
        @character_sprites.push(sprite)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ● タイルセットのロード
  #--------------------------------------------------------------------------
  def load_tileset
    @tileset = $game_map.tileset
    @tileset.tileset_names.each_with_index{|name, i|
      @tilemap.bitmaps[i] = Cache.tileset(name)
    }
    @tilemap.flags = @tileset.flags
  end
  #--------------------------------------------------------------------------
  # ● 陽炎作成用のマップを削除
  #--------------------------------------------------------------------------
  def dispose_heat_haze_map
    @tilemap.viewport.dispose
    @tilemap.dispose
    @tileset = nil
    @character_sprites.each {|sprite| sprite.dispose }
    @character_sprites = nil
  end
  #--------------------------------------------------------------------------
  # ● 陽炎用のSpriteを作成
  #--------------------------------------------------------------------------
  def create_heat_haze
    # Sprite作成の前準備
    old_brightness = Graphics.brightness
    Graphics.freeze
    Graphics.brightness = 255
    # Spriteの作成
    @heat_haze_sprite = Sprite.new
    unless $game_temp.heat_haze_bitmap
      @owner.viewport3.visible = false
      $game_temp.heat_haze_bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
      # Bitmapの作成
      sw = $game_map.screen_tile_x
      sh = $game_map.screen_tile_y
      ($game_map.width / sw.to_f).ceil.times{|x|
        ($game_map.height / sh.to_f).ceil.times{|y|
          update_snap(sw * x, sh * y)
          bitmap = Graphics.snap_to_bitmap
          $game_temp.heat_haze_bitmap.blt($game_map.display_x * 32, $game_map.display_y * 32, bitmap, bitmap.rect)
          bitmap.dispose
        }
      }
      2.times{$game_temp.heat_haze_bitmap.blur}
      # 表示状態の戻し
      @owner.viewport3.visible = true
      $game_player.center($game_player.x, $game_player.y)
    end
    @heat_haze_sprite.bitmap = $game_temp.heat_haze_bitmap
    # Spriteのパラメータをセット
    @heat_haze_sprite.z = 100
    @heat_haze_sprite.wave_amp = 3      # 振幅
    @heat_haze_sprite.wave_length = 90  # 周期
    @heat_haze_sprite.wave_speed = 700  # 速度
    @heat_haze_sprite.viewport = @viewport
    @heat_haze_sprite.opacity = $game_temp.heat_haze_parameters[0]
    @heat_haze_sprite.wave_phase = $game_temp.heat_haze_parameters[2]
    # Sprite作成の後処理
    Graphics.frame_reset
    if old_brightness != 255
      Graphics.transition(0)
      Graphics.brightness = old_brightness
    end
  end
  #--------------------------------------------------------------------------
  # ● 陽炎bitmap作成時の撮影領域の更新
  #--------------------------------------------------------------------------
  def update_snap(x, y)
    $game_map.set_display_pos(x, y)
    @tilemap.ox = $game_map.display_x * 32
    @tilemap.oy = $game_map.display_y * 32
    @character_sprites.each {|sprite| sprite.update_snap}
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    if @heat_haze_sprite
      $game_temp.heat_haze_parameters[0] = @heat_haze_sprite.opacity
      $game_temp.heat_haze_parameters[2] = @heat_haze_sprite.wave_phase
      if SceneManager.scene.is_a?(Scene_Map)
        $game_temp.heat_haze_bitmap.dispose
        $game_temp.heat_haze_bitmap = nil
      end
      @heat_haze_sprite.dispose
      @heat_haze_sprite = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return unless @heat_haze_sprite
    if (Graphics.frame_count % 3).zero?
      # 陽炎のゆらめき更新
      @heat_haze_sprite.update
      # 陽炎の不透明度変化方向 (- or +)
      $game_temp.heat_haze_parameters[1] = rand(2).zero? if rand(3).zero?
      # 陽炎の不透明度変化 (40~90)
      if $game_temp.heat_haze_parameters[1]
        @heat_haze_sprite.opacity = [@heat_haze_sprite.opacity + 3, 90].min
      else
        @heat_haze_sprite.opacity = [@heat_haze_sprite.opacity - 3, 40].max
      end
    end
    # 陽炎の座標更新
    @heat_haze_sprite.ox = @owner.tilemap.ox
    @heat_haze_sprite.oy = @owner.tilemap.oy + 3
  end
end

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 陽炎bitmap作成時の撮影領域の更新
  #--------------------------------------------------------------------------
  def update_snap
    self.x = @character.screen_x
    self.y = @character.screen_y
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :tilemap
  attr_reader   :viewport3
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias heat_haze_initialize initialize
  def initialize
    @heat_haze = Heat_Haze.new(self)
    heat_haze_initialize
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの作成
  #--------------------------------------------------------------------------
  alias heat_haze_create_viewports create_viewports
  def create_viewports
    heat_haze_create_viewports
    @heat_haze.viewport = @viewport1
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias heat_haze_dispose dispose
  def dispose
    heat_haze_dispose
    dispose_heat_haze
  end
  #--------------------------------------------------------------------------
  # ● 陽炎の解放
  #--------------------------------------------------------------------------
  def dispose_heat_haze
    @heat_haze.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias heat_haze_update update
  def update
    heat_haze_update
    update_heat_haze
  end
  #--------------------------------------------------------------------------
  # ● 陽炎の更新
  #--------------------------------------------------------------------------
  def update_heat_haze
    @heat_haze.update
  end
  #--------------------------------------------------------------------------
  # ● キャラクタースプライトの作成
  #--------------------------------------------------------------------------
  alias heat_haze_create_characters create_characters
  def create_characters
    @heat_haze.refresh
    heat_haze_create_characters
  end
end

Pour l'utilisation:

Il n'y a rien à toucher in-game.
Par contre dans le script, à la ligne 41. Il faut noter, couper de virgule toutes les maps sur lesquels vous désirer l'effet de chaleur.

Code:
 MAP_ID = [1,5]
Ici le script donnera un effet sur la map 1 et le map 5. Vous pouvez en rajouter autant que vous le désirez.

Alors sources -> http://kaisou-ryouiki.sakura.ne.jp/
voilà Very Happy
Revenir en haut Aller en bas
 
Effet de chaleur
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [VX] Effet de lumière
» Effet film pour des cinématiques
» Effet film pour cinématique II
» Effet de lumière sympatique compatible XP/VX/VXAce
» Pack effet et ambiance.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Palais Créatif :: ~ PARTAGE ~ :: Scripts et plugins :: RPG Maker VXAce :: Autres-
Sauter vers: