Voilà j'ai trouvé ce script toujours sur la toile et j'en remercie Corwin.
Il permet de faire des ombres interactives.
Voilà une image que j'ai faite en bas.
Voilà et l'ombre bouge en fonction de vos déplacements !!!!
1Script à modifier
1Script à créer
Il faut d'abord modifier le script "Sprite_Character" par ce code:
Code: |
#============================================================================== # ■ Sprite_Character modifié (voir Sprite_Ombre) #------------------------------------------------------------------------------ # キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < RPG::Sprite #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :character # キャラクター #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # character : キャラクター (Game_Character) #-------------------------------------------------------------------------- def initialize(viewport, character = nil) super(viewport) @character = character @ombrelist=[] if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"]) if (character.list[1]!=nil and character.list[1].code == 108) @anglemin=character.list[1].parameters.to_s end if (character.list[2]!=nil and character.list[2].code == 108) @anglemax=character.list[2].parameters.to_s end if (character.list[3]!=nil and character.list[3].code == 108) @distancemax=character.list[3].parameters.to_s end for i in $game_map.events.keys.sort if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["o"]) @ombrelist[i+1] = Sprite_Ombre.new(viewport, $game_map.events[i],self,@anglemin,@anglemax,@distancemax) end end @ombrelist[1] = Sprite_Ombre.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax) end update end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合 if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_hue != @character.character_hue # タイル ID とファイル名、色相を記憶 @tile_id = @character.tile_id @character_name = @character.character_name @character_hue = @character.character_hue # タイル ID が有効な値の場合 if @tile_id >= 384 self.bitmap = RPG::Cache.tile($game_map.tileset_name, @tile_id, @character.character_hue) self.src_rect.set(0, 0, 32, 32) self.ox = 16 self.oy = 32 # タイル ID が無効な値の場合 else self.bitmap = RPG::Cache.character(@character.character_name, @character.character_hue) @cw = bitmap.width / 4 @ch = bitmap.height / 4 self.ox = @cw / 2 self.oy = @ch end end # 可視状態を設定 self.visible = (not @character.transparent) # グラフィックがキャラクターの場合 if @tile_id == 0 # 転送元の矩形を設定 sx = @character.pattern * @cw sy = (@character.direction - 2) / 2 * @ch self.src_rect.set(sx, sy, @cw, @ch) end # スプライトの座標を設定 self.x = @character.screen_x self.y = @character.screen_y self.z = @character.screen_z(@ch) # 不透明度、合成方法、茂み深さを設定 self.opacity = @character.opacity self.blend_type = @character.blend_type self.bush_depth = @character.bush_depth # アニメーション if @character.animation_id != 0 animation = $data_animations[@character.animation_id] animation(animation, true) @character.animation_id = 0 end if @ombrelist!=[] for i in [url=mailto:1.. @ombrelist.size]1.. @ombrelist.size[/url] if @ombrelist[i]!=nil @ombrelist[i].update end end end end end
|
Puis juste en dessous créez un script nommé "Sprite_Ombre" et collez-y ce code:
Code: |
#============================================================================== # ■ Sprite_Ombre # Base par Genzai Kawakami, dynamisme par Rataime, améliorations par Boushy #------------------------------------------------------------------------------ # キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Ombre < RPG::Sprite #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :character # キャラクター #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # character : キャラクター (Game_Character) #-------------------------------------------------------------------------- def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0) super(viewport) @anglemin=anglemin.to_f @anglemax=anglemax.to_f @distancemax=distancemax.to_f @character = character @source = source update end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合 if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_hue != @character.character_hue # タイル ID とファイル名、色相を記憶 @tile_id = @character.tile_id @character_name = @character.character_name @character_hue = @character.character_hue # タイル ID が有効な値の場合 if @tile_id >= 384 self.bitmap = RPG::Cache.tile($game_map.tileset_name, @tile_id, @character.character_hue) self.src_rect.set(0, 0, 32, 32) self.ox = 16 self.oy = 32 # タイル ID が無効な値の場合 else self.bitmap = RPG::Cache.character(@character.character_name, @character.character_hue) @cw = bitmap.width / 4 @ch = bitmap.height / 4 self.ox = @cw / 2 self.oy = @ch end end # 可視状態を設定 self.visible = (not @character.transparent) # グラフィックがキャラクターの場合 if @tile_id == 0 # 転送元の矩形を設定 sx = @character.pattern * @cw @direct=@character.direction if self.angle>90 or angle<-90 if @direct== 6 sy = ( 4- 2) / 2 * @ch#@character.direction end if @direct== 4 sy = ( 6- 2) / 2 * @ch end if @direct != 4 and @direct !=6 sy = (@character.direction - 2) / 2 * @ch end else sy = (@character.direction - 2) / 2 * @ch end self.src_rect.set(sx, sy, @cw, @ch) end # スプライトの座標を設定 self.x = @character.screen_x self.y = @character.screen_y-5 self.z = @character.screen_z(@ch)-1 # 不透明度、合成方法、茂み深さを設定 self.opacity = @character.opacity self.blend_type = @character.blend_type self.bush_depth = @character.bush_depth # アニメーション if @character.animation_id != 0 animation = $data_animations[@character.animation_id] animation(animation, true) @character.animation_id = 0 end @deltax=@source.x-self.x @deltay= @source.y-self.y self.angle = 57.3*Math.atan2(@deltax, @deltay ) @angle_trigo=self.angle+90 if @angle_trigo<0 @angle_trigo=360+@angle_trigo end self.color = Color.new(0, 0, 0) @distance = ((@deltax ** 2) + (@deltay ** 2)) self.opacity = 1200000/(@distance+6000) @distance = @distance ** 0.5 if @distancemax !=0 and @distance>=@distancemax self.opacity=0 end if @anglemin !=0 or @anglemax !=0 if @angle_trigo<@anglemin or @angle_trigo>@anglemax self.opacity=0 end end end end
|
Le mode d'emploi est pas compliqué :
- Pour creer une source, mettez comme premiere ligne d'un event un commentaire avec la lettre s
- Pour ombrer un event, mettez comme premiere ligne de celui ci un commentaire avec la lettre o
Voilou voilou le résultat