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

Lecteur de GIF
Aller à la page: 1, 2, 3, 4  >
 
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
Brendan75
Ex-staff


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

MessagePosté le: Dim 6 Mar - 13:09 (2011)    Sujet du message: Lecteur de GIF

Bonjour !


Voici un petit script bioen pratique pour les animations : un lecteur de fichier gif. Ce script existe depuis longtemps dans Essential, voici une adaptation à PSP (et à RMXP en général). Comment l'utiliser ? Il vous faut avant tout ajouter le script et le fichier gif.dll

Code:
#==============================================================================
# ■ GIF
# D'après un script de Pokémon Essentials, adapté par Brendan75
#-----------------------------------------------------------------------------
#   Lecture de Fichier .GIF et animations.
#==============================================================================
class GifSprite < Sprite
 
  #---------------------------------------------------------------------------
  # ● Fonctions DLL
  #---------------------------------------------------------------------------
  GTPF   = Win32API.new("gif.dll", "GifToPngFiles", 'pp', 'l')
  GTPFIM = Win32API.new("gif.dll", "GifToPngFilesInMemory", 'plp', 'l')
  CDS    = Win32API.new("gif.dll", "CopyDataString", 'lpl', 'l')
  FDS    = Win32API.new("gif.dll", "FreeDataString", 'l', '')
 
  #---------------------------------------------------------------------------
  # ● Variables Publiques
  #---------------------------------------------------------------------------
  attr_accessor :gifbitmaps
  attr_accessor :gifdelays

  #---------------------------------------------------------------------------
  # ● Get Data From Result
  #---------------------------------------------------------------------------
  def getDataFromResult(result)
    datasize = CDS.call(result, "", 0)
    ret = nil
    if datasize != 0
      data = "0" * datasize
      CDS.call(result, data, datasize)
      ret = data.unpack("V*")
    end
    FDS.call(result)
    return ret
  end
 
  #---------------------------------------------------------------------------
  # ● Initialize
  #---------------------------------------------------------------------------
  def initialize(file, viewport = nil)
    super(viewport)
    @gifbitmaps   = []
    @gifdelays    = []
    @totalframes  = 0
    @framecount   = 0
    @currentIndex = 0
    setup(file)
    self.bitmap = Bitmap.new(@gifbitmaps[0].width, @gifbitmaps[0].height)
    update
  end
 
  #---------------------------------------------------------------------------
  # ● Setup
  #---------------------------------------------------------------------------
  def setup(file)
    file = canonicalize(file)
    if (filestring = File.open(file, "rb"){|f| f.read(1)})
      filestrName = file
    elsif (filestring =File.open(file + ".gif", "rb"){|f| f.read(1)})
      filestrName = file + ".gif"
    end
    tmpBase = File.basename(file) + "_tmp_"
    filestring = File.open(filestrName, "rb"){|f| f.read } if filestring
    Dir.chdir(ENV["TEMP"]) do
      result = GTPFIM.call(filestring, filestring.length, tmpBase)
      @gifdelays = getDataFromResult(result)
      @totalframes = @gifdelays.pop
      for i in 0.. @gifdelays.length
        @gifdelays[i] = [@gifdelays[i], 1].max
        bmfile = sprintf("%s%d.png", tmpBase, i)
        if FileTest.exist?(bmfile)
          gifbitmap = Bitmap.new(bmfile)
          @gifbitmaps.push(gifbitmap)
          File.delete(bmfile)
        else
          @gifdelays.delete_at(i)
        end
      end
    end
  end
 
  #---------------------------------------------------------------------------
  # ● Update
  #---------------------------------------------------------------------------
  def update
    super
    if @gifbitmaps.length > 0
      @framecount += 2
      for i in 0.. @gifdelays.size-1
        @currentIndex = i if @gifdelays[i] <= @framecount % @totalframes
      end
    end
    self.bitmap.clear
    bitmap = @gifbitmaps[@currentIndex]
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    self.bitmap.blt(0, 0, bitmap, rect)
  end
 
  #---------------------------------------------------------------------------
  # ● Each
  #---------------------------------------------------------------------------
  def each
    @gifbitmaps.each {|item| yield item }
  end
end
 
#==============================================================================
# ■ Fonctions Complémentaires
#==============================================================================
def strsplit(str, re)
  ret = []
  tstr = str
  while re =~tstr
  ret[ret.length] = $~.pre_match
  tstr = $~.post_match
  end
  ret[ret.length] = tstr if ret.length
  return ret
end

def canonicalize(c)
  csplit = strsplit(c, /[\/\\]/)
  pos = -1
  ret = []
  retstr = ""
  for x in csplit
    if x == "."
     
    elsif x == ".."
      ret.delete_at(pos) if pos >= 0
      pos -= 1
    else
      ret.push(x)
      pos += 1
    end
  end
  for i in 0...ret.length
    retstr += "/" if i > 0
    retstr += ret[i]
  end
  return retstr
end

Pour créer une image GIF, il suffit de creér un nouveau GifSprite qui se comporte quasiment comme un Sprite normal, à l'exception de tout ce qui concerne les bitmaps bien sûr. Le fichier GIF est le premier attribut d'initialisation.
Code:
@gif = GifSprite.new("fichier.gif")
@gif.x = 25
@gif.z = 10
@gif.opacity = 128
# etc...


Voilà tout, j'espère que ça vous aidera.


Dernière édition par Brendan75 le Mer 11 Jan - 07:58 (2012); édité 2 fois
Revenir en haut
Publicité






MessagePosté le: Dim 6 Mar - 13:09 (2011)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Tinei
Membre


Inscrit le: 12 Juin 2010
Messages: 245
Localisation: Quelque part dans l'univers
Masculin

MessagePosté le: Dim 6 Mar - 15:24 (2011)    Sujet du message: Lecteur de GIF

Oh Cooooooooooooooooooooool !
Merciiiiiiiiiiiiiiii
Bravoooooooooooooooooooooo !
Oh la la depuis le temps que j'attend ça !
Merci infiniment.
Revenir en haut
Visiter le site web du posteur
Wildstylez
Invité





MessagePosté le: Dim 6 Mar - 15:41 (2011)    Sujet du message: Lecteur de GIF

Merci brendan. Par contre pour les combats, si on veut changer les fronts, y'aura toujours le ".png"qui sera compté nan ?
Revenir en haut
Brendan75
Ex-staff


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

MessagePosté le: Dim 6 Mar - 15:48 (2011)    Sujet du message: Lecteur de GIF

En effet, mais il suffit de modifier un peu les lignes 200 et suivantes du script "Pokemon".
Revenir en haut
Wildstylez
Invité





MessagePosté le: Dim 6 Mar - 16:42 (2011)    Sujet du message: Lecteur de GIF

Arf, ça ne s'anime pas chez moi. Suis-je le seul ? ( je précise que ce n'est pas un front de battler pendant un combat que j'ai testé, étant encore trop peu expérimenté en scripts, mais un sprite (exemple) qui est censé s'animer dès l'ouverture du menu ).
Revenir en haut
Brendan75
Ex-staff


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

MessagePosté le: Dim 6 Mar - 17:15 (2011)    Sujet du message: Lecteur de GIF

Il faut updater les images régulièrement pour voir l'animation. Tu l'as fait ?
Revenir en haut
Wildstylez
Invité





MessagePosté le: Dim 6 Mar - 17:17 (2011)    Sujet du message: Lecteur de GIF

Hum... C'est-à-dire ? ^^'
Revenir en haut
Brendan75
Ex-staff


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

MessagePosté le: Dim 6 Mar - 17:47 (2011)    Sujet du message: Lecteur de GIF

bah mettre sprite.update quoi... Si ça ne 'évoque rien, il faut revoir tes cours de RGSS.
Revenir en haut
Tinei
Membre


Inscrit le: 12 Juin 2010
Messages: 245
Localisation: Quelque part dans l'univers
Masculin

MessagePosté le: Dim 6 Mar - 19:04 (2011)    Sujet du message: Lecteur de GIF

Wildstylez a écrit:
Merci brendan. Par contre pour les combats, si on veut changer les fronts, y'aura toujours le ".png"qui sera compté nan ?


En effet, ce serais bien, et aussi pour le menu.
Mais je vous laisse avec ça, parce que la programmation, c'est pas mon fort.
Revenir en haut
Visiter le site web du posteur
Wildstylez
Invité





MessagePosté le: Dim 6 Mar - 19:14 (2011)    Sujet du message: Lecteur de GIF

Hormis quelques bugs graphiques ( je ne sais pas si c'est dû au gif ), ça marche bel et bien, merci. Je vais essayer de voir pour les combats maintenant.
Revenir en haut
Gryfenfeu
Invité





MessagePosté le: Dim 6 Mar - 20:36 (2011)    Sujet du message: Lecteur de GIF

Ce script marche t'il avec les sprites animé que Speed a poster dans les ressources ?
Revenir en haut
Wildstylez
Invité





MessagePosté le: Dim 6 Mar - 21:26 (2011)    Sujet du message: Lecteur de GIF

Oui, mais il y a des bugs graphiques en fait. Donc je sais pas si ça vient de moi, des gifs, ou du script.
Revenir en haut
Brendan75
Ex-staff


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

MessagePosté le: Dim 6 Mar - 22:37 (2011)    Sujet du message: Lecteur de GIF

Quels bugs graphiques ?
Revenir en haut
Oli-link
Membre


Inscrit le: 14 Jan 2011
Messages: 81

MessagePosté le: Lun 7 Mar - 18:03 (2011)    Sujet du message: Lecteur de GIF

comment faire pour que les front et les backs des pokémons soit en gif?
Revenir en haut
Wildstylez
Invité





MessagePosté le: Mar 8 Mar - 13:37 (2011)    Sujet du message: Lecteur de GIF

Brendan75 a écrit:

Quels bugs graphiques ?

J'ai ça par exemple :

Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 07:54 (2017)    Sujet du message: Lecteur de GIF

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
Aller à la page: 1, 2, 3, 4  >
Page 1 sur 4

 
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