Pokémon Script Project Forum Index

Manuel | Search
 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
Goto page: 1, 2, 3, 4  >
 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Sun 6 Mar - 13:09 (2011)    Post subject: 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.


Last edited by Brendan75 on Wed 11 Jan - 07:58 (2012); edited 2 times in total
Back to top
Publicité






PostPosted: Sun 6 Mar - 13:09 (2011)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Tinei
Membre


Joined: 12 Jun 2010
Posts: 245
Localisation: Quelque part dans l'univers
Masculin

PostPosted: Sun 6 Mar - 15:24 (2011)    Post subject: Lecteur de GIF

Oh Cooooooooooooooooooooool !
Merciiiiiiiiiiiiiiii
Bravoooooooooooooooooooooo !
Oh la la depuis le temps que j'attend ça !
Merci infiniment.
Back to top
Visit poster’s website
Wildstylez
Guest





PostPosted: Sun 6 Mar - 15:41 (2011)    Post subject: 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 ?
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Sun 6 Mar - 15:48 (2011)    Post subject: Lecteur de GIF

En effet, mais il suffit de modifier un peu les lignes 200 et suivantes du script "Pokemon".
Back to top
Wildstylez
Guest





PostPosted: Sun 6 Mar - 16:42 (2011)    Post subject: 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 ).
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Sun 6 Mar - 17:15 (2011)    Post subject: Lecteur de GIF

Il faut updater les images régulièrement pour voir l'animation. Tu l'as fait ?
Back to top
Wildstylez
Guest





PostPosted: Sun 6 Mar - 17:17 (2011)    Post subject: Lecteur de GIF

Hum... C'est-à-dire ? ^^'
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Sun 6 Mar - 17:47 (2011)    Post subject: Lecteur de GIF

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


Joined: 12 Jun 2010
Posts: 245
Localisation: Quelque part dans l'univers
Masculin

PostPosted: Sun 6 Mar - 19:04 (2011)    Post subject: Lecteur de GIF

Wildstylez wrote:
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.
Back to top
Visit poster’s website
Wildstylez
Guest





PostPosted: Sun 6 Mar - 19:14 (2011)    Post subject: 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.
Back to top
Gryfenfeu
Guest





PostPosted: Sun 6 Mar - 20:36 (2011)    Post subject: Lecteur de GIF

Ce script marche t'il avec les sprites animé que Speed a poster dans les ressources ?
Back to top
Wildstylez
Guest





PostPosted: Sun 6 Mar - 21:26 (2011)    Post subject: 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.
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Sun 6 Mar - 22:37 (2011)    Post subject: Lecteur de GIF

Quels bugs graphiques ?
Back to top
Oli-link
Membre


Joined: 14 Jan 2011
Posts: 81

PostPosted: Mon 7 Mar - 18:03 (2011)    Post subject: Lecteur de GIF

comment faire pour que les front et les backs des pokémons soit en gif?
Back to top
Wildstylez
Guest





PostPosted: Tue 8 Mar - 13:37 (2011)    Post subject: Lecteur de GIF

Brendan75 wrote:

Quels bugs graphiques ?

J'ai ça par exemple :

Back to top
Contenu Sponsorisé






PostPosted: Today at 11:52 (2019)    Post subject: Lecteur de GIF

Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Goto page: 1, 2, 3, 4  >
Page 1 of 4

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a 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)