Pokémon Script Project Index du Forum

S’enregistrer | Rechercher | Connexion
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Classe S_Sprite

 
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts
Sujet précédent :: Sujet suivant   
Auteur Message
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 6 Fév - 14:51 (2011)    Sujet du message: Classe S_Sprite

Classe S_Sprite


Information : Cette classe sert a créé des Sprites multi bitmaps pour des utilisations multiple sans avoir à mettre des tas de lignes de code.
Niveau requis :
60%
Script :
Code:
#==========================================#
#¤Création de sprites dynamiques           #
#------------------------------------------#
#©Yuri - 岼 | Créé pour POD / PVCobalt     #
#==========================================#
class S_Sprite < Sprite
  #==================================#
  #§Déclaration des attr_ et autres #
  #==================================#
  attr_accessor :bitmaps
  attr_accessor :duration
  attr_accessor :moving
  attr_accessor :infini
  attr_accessor :old_bitmap
  attr_accessor :bmp_f_pos
  attr_accessor :pos
  #==================================#
  #§Initialisation                  #
  #==================================#
  def initialize(viewport,*bitmaps)
    super(viewport)
    @bitmaps=[]
    for i in bitmaps
      if i.class == Bitmap
        @bitmaps.push(i)
      elsif i.class == String
        @bitmaps.push(Bitmap.new(i))
      else
        print("Erreur : `#{i.inspect}` n'est pas un Bitmap ou un string.\n L'erreur a été détecté dans #{self.inspect}.")
        @bitmaps.push(Bitmap.new(1,1))
      end
    end
    @duration = 0
    @moving={}
    @infini=false
    @bmp_f_pos=0
    @pos=0
  end
  #==================================#
  #§modifications                   #
  #==================================#
  def move(duration,moving,inifini=false,reset=true,get_old_bmp=true)
    if reset
      @pos=0
      @bmp_f_pos=0
    end
    if get_old_bmp
      @old_bitmap=self.bitmap.clone
    end
    @duration=duration.to_i
    for i in moving
      @moving[i[0]]=i[1]
    end
    @infini=infini
  end
  #==================================#
  #§Dispose                         #
  #==================================#
  def dispose
    if @old_bitmap
      @old_bitmap.dispose
    end
    @bitmaps=nil
    super
  end
  #==================================#
  #§Update Sprite                   #
  #==================================#
  def update_sprite
    if @duration < @pos
      return
    end
    if @moving["bitmap"] and !@moving["bitmapf"]
      lbmp=@moving["bitmap"].length
      self.bitmap=@bitmaps[@moving["bitmap"][@pos%lbmp]]
    elsif @moving["bitmap"] and @moving["bitmapf"]
      lbmp=@moving["bitmap"].length
      pos2=@bmp_f_pos / @moving["bitmapf"]
      @bmp_f_pos += 1
      @bmp_f_pos = 0 if @bmp_f_pos > @duration
      self.bitmap=@bitmaps[@moving["bitmap"][pos2%lbmp]]
    end
    if @moving["x"]
      self.x += @moving["x"]
    end
    if @moving["y"]
      self.y += @moving["y"]
    end
    if @moving["ox"]
      self.ox += @moving["ox"]
    end
    if @moving["oy"]
      self.oy += @moving["oy"]
    end
    if @moving["z"]
      self.z += @moving["z"]
    end
    if @moving["trans"] and @old_bitmap
      bmp=@moving["trans"]
      self.bitmap=Bitmap.new(@old_bitmap.width,@old_bitmap.height)
      self.bitmap.blt(0,0,@old_bitmap,src_rect)
      self.bitmap.blt(0,0,bmp,bmp.rect,255-(255/@duration.to_f*(@duration-@pos)).to_i)
    end
    if @moving["trans2"] and @old_bitmap
      bmp=@moving["trans2"]
      self.bitmap=Bitmap.new(@old_bitmap.width,@old_bitmap.height)
      self.bitmap.blt(0,0,@old_bitmap,src_rect,(255/@duration.to_f*(@duration-@pos)).to_i)
      self.bitmap.blt(0,0,bmp,bmp.rect,255-(255/@duration.to_f*(@duration-@pos)).to_i)
    end
    if @moving["opacity"]
      self.opacity += eval(@moving["opacity"].to_s)
    end
    @pos += 1 unless @infini
  end
end

Utilisation :
Lors de la création du Sprite mettez :
Code:
$variable=S_Sprite.new(viewport,*bitmaps)

Remplacez viewport par le Viewport dans lequel ce Sprite seras affiché et remplacez *bitmaps par le ou les bitmaps qui serons contenu dans le Sprite, ce script accepte les bitmaps sous forme de Bitmap ou de String (l'emplacement du fichier).
Pour modifier les déplacements du Sprite utilisez la méthode "move" :
Code:
$variable.move(duration,moving,inifini=false,reset=true,get_old_bmp=true)

duration => Nombre de frames durant lesquels le contenu de moving seras pris en compte.
movig => Doit contenir un Hash de tout les déplacement de l'image, lisez la méthode update_sprite pour comprendre.
infini => Définit si l'image s'animera indéfiniment ou pas, si infini=true duration n'est plus pris en compte.
reset => Définit si on remet les status comme @pos à 0.
get_old_bitmap => Définit si on clone l'ancien bitmap dans le cas d'une transition.

Il ne faut pas oublier de mettre le sprite à jour :
Code:
$variable.update_sprite
Revenir en haut
Facebook Twitter
Publicité






MessagePosté le: Dim 6 Fév - 14:51 (2011)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Brendan75
Ex-staff


Inscrit le: 24 Mar 2008
Messages: 1 827
Localisation: Paris
Masculin

MessagePosté le: Dim 6 Fév - 15:56 (2011)    Sujet du message: Classe S_Sprite

J'ai juste une question : A quoi sert ce script ? Tu as des exemples ?
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 6 Fév - 16:17 (2011)    Sujet du message: Classe S_Sprite

Ce script sert à emmagasiner plusieurs bitmaps et par exemple de les switcher sans trop se faire chier a mettre des tas de lignes de code.
Un petit exemple :
Code:
@viewport=Viewport.new(0,0,640,480)
@viewport.z=10001
@a=S_Sprite.new(@viewport,RPG::Cache.battler("Pkmn_1_1.png"),RPG::Cache.battler("Pkmn_1_2.png"),RPG::Cache.battler("Pkmn_1_3.png"),RPG::Cache.battler("Pkmn_1_4.png"),RPG::Cache.battler("Pkmn_1_5.png"),RPG::Cache.battler("Pkmn_1_6.png"))
@b=S_Sprite.new(@viewport,RPG::Cache.battler("Pkmn_491_1.png"),RPG::Cache.battler("Pkmn_491_2.png"),RPG::Cache.battler("Pkmn_491_3.png"),RPG::Cache.battler("Pkmn_491_4.png"),RPG::Cache.battler("Pkmn_491_5.png"),RPG::Cache.battler("Pkmn_491_6.png"))
@b.x,@b.y=80,80
#la j'ai créé les deux objets.
@a.move(60,{"bitmap" => [0,1,2,3,4,5],"bitmapf" => 10},true,true,false)
@b.move(60,{"bitmap" => [0,1,2,3,4,5],"bitmapf" => 10},true,true,false)
#On fait dérouler une scène
loop do
  Graphics.update
  Input.update
  #Scene
  @a.update_sprite
  @b.update_sprite
end

Les Sprites vont changer de bitmap toute les 10 frames.

Après en modifiant Scene_Map on peut utiliser des images animées en plein évent qui se mettent à jour sans la commande en évent et faire comme dans BW par exemple, le prof continueras de parler pendant le message.
Revenir en haut
Facebook Twitter
Brendan75
Ex-staff


Inscrit le: 24 Mar 2008
Messages: 1 827
Localisation: Paris
Masculin

MessagePosté le: Dim 6 Fév - 16:38 (2011)    Sujet du message: Classe S_Sprite

D'accord, je vois, tout cela me semble bien compliqué mais ça en aidera surement quelques uns.
Revenir en haut
Wildstylez
Invité





MessagePosté le: Dim 6 Fév - 20:29 (2011)    Sujet du message: Classe S_Sprite

Donc en gros, cela permet de faire une "animation" ? - Genre, pendant les combats, on pourra faire en sorte que le pokémon soit animé -.
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Dim 6 Fév - 22:34 (2011)    Sujet du message: Classe S_Sprite

Animations, transition entre deux bitmaps, modification des position.
Tu pourras faire ça il ne faut pas oublier de mettre a jour les sprites c'est tout.
Revenir en haut
Facebook Twitter
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 07:50 (2017)    Sujet du message: Classe S_Sprite

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)
Traduction par : phpBB-fr.com