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



Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

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: