Sujet n°5868
Posté par GT.Onizuka le 17 Jan - 15:07 (2010)
Titre : [Script] Effets d'ombres super interactives
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
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
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
Image du test

Posté par Ecyaj le 17 Jan - 15:15 (2010)
C'est normal la balise [url] en plein milieu de Sprite_Character ? =0 (ligne 96)

Posté par GT.Onizuka le 17 Jan - 15:44 (2010)
Ah oups

C'est à modifier par :



 
Code:
1..@omberlist.size 
Je vais le faire Clin d'œil foireux

Merci

Posté par antoinedu92 le 18 Jan - 08:51 (2010)
Pas mal mais peut-on utiliser ce script d'ombre juste pour les ombres commes ca sous le héros ? :

Posté par Lén le 18 Jan - 19:47 (2010)
non. pour un truc aussi simple tu peu le faire avec Gimp.

Posté par Sphinx le 18 Jan - 19:53 (2010)
Lén a écrit:
non. pour un truc aussi simple tu peu le faire avec Gimp.


En fait, je crois qu'il parle d'ajouter l'ombre quand le héros saute Imbécile heureux

Posté par FinalArt le 18 Jan - 20:57 (2010)
Et bien simplement modididifier le chara du héros quand il saute en le remplacement avec son chara où il y a déjà l'ombre, et quand il fait son atterrissage on rechange le chara du héros en prenant celui sans ombre, simple nan ?

Ou sinon on garde l'ombre partout ( directement sur le chara du héros en couleur translucide )

Posté par antoinedu92 le 19 Jan - 12:58 (2010)
je ne parlait pas du saut du héro mais bien de la translucidité de son ombre en temps normale Imbécile heureux .
Est-il possible de le faire?

Posté par FinalArt le 19 Jan - 14:36 (2010)
Tu met directement l'ombre sous le character, sur l'ensemble la planche de character du héros, sous le héros, ensuite quand tu l'entre dans RMXP, tu sélectionne la couleur de l'ombre pour translucide, et tu sélectionne la couleur de fond pour la transparence,

Si tu ne comprends pas, je te le fais

Posté par antoinedu92 le 19 Jan - 14:46 (2010)
Ok c'est bon j'ai compris. merci je testerais tt à l'heure

Posté par GT.Onizuka le 20 Jan - 16:26 (2010)
En faite @ Lén et @ antoine   l'ombre que vous voyez n'est pas fixe   oui c'est ma faute mon screenshot ne convainc pas trop .

Posté par FinalArt le 20 Jan - 16:35 (2010)
N'est pas fixe ? Ok, pour être clair, il n'y a pas mieux que toi x)

Tu veux dire que l'ombre vacille ou tourne autour du héros selon la source de lumière ? ( fenêtre, lampe... )

Posté par GT.Onizuka le 20 Jan - 17:13 (2010)
@ pokémazur  oui !!!!!

Posté par poussi le 24 Jan - 16:40 (2010)
y a t'il un bleme ici ?

 
Code:
      for i in <a href="mailto:1..@omberlist.size ">1..@omberlist.size</a>



Posté par poussi le 24 Jan - 17:01 (2010)
jy suis bloqueé reponder sil vous plais !

Posté par Pαlвσlѕку le 24 Jan - 17:31 (2010)
Remplace par ça :

for i in 1..@omberlist.size

Posté par GT.Onizuka le 24 Jan - 17:31 (2010)
Attends en fait il marche comme au début en s'en fiche du http://pokemonscriptproject.xooit.fr/images/wysiwyg.html?5 il change tout seul  .

En tout cas moi j'ai rien changé

up script édité

Posté par PiVa le 25 Jan - 16:31 (2010)
Je passe dire (car je suis pas mort juste dans une merde profonde).

Que si mes souvenirs sont bons, ce machin là empêchais le maplink de fonctionner.

Il étais présent dans PSP 4G.

Posté par Ninzu le 5 Avr - 10:23 (2010)
Salut j'ai un Soucis depuis l'installation de ce script !


 
Code:
 sprite = Sprite_Character.new(@viewport1, $game_map.events[i])

Posté par GT.Onizuka le 7 Avr - 18:00 (2010)
On dirait .
Ca marche chez quelques uns et pas chez d'autres, en tout cas, ça a marché chez moi, je ne vois pas le problème  :?

Posté par Sphinx le 7 Avr - 18:19 (2010)
Parce que la balise code génère un léger bug qd on copie le script : ca met devant chaque ligne un # ce qui désactive les scripts.

Posté par GT.Onizuka le 7 Avr - 18:26 (2010)
Voilà !
Alors il vaut mieux faire "Version Texte" puis copier le script  :D

Posté par lolodino77 le 14 Avr - 15:14 (2010)
Bonjour, j'ai un problème.
Cela m'affiche : ?????'Sprite_Character'? 95 ??? SyntaxError ????????
J'aimerais que l'on me trouve la raison de ce problème.
Merci d'avance.