RPG Fusion
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilPortailRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment :
Nike : Jusqu’à 50% sur les articles de ...
Voir le deal

 

 [Question bête] XP et les vifs [Résolu]

Aller en bas 
AuteurMessage
Seri
Modérateur
Modérateur
Seri


Masculin
Nombre de messages : 558
Age : 35
Projet(s) en cours : Oliver
Niveau Rpg Maker : Se débrouille
Jeux Préférés : FF9,FF12, Chrono Cross
Date d'inscription : 10/07/2012

[Question bête] XP et les vifs [Résolu] Empty
MessageSujet: [Question bête] XP et les vifs [Résolu]   [Question bête] XP et les vifs [Résolu] EmptyMer 11 Sep 2013, 15:26

Bonjour bonjour !

J'ai une question bête pour vous utilisateurs assidus de RMXP!
Je suis en train de réaliser une animation sous forme de .gif avec Gimp. C'est pas très difficile, et on peut placer plus facilement ses images pour voir le résultat final. Seulement voilà, tant qu'à faire, pour éviter d'avoir à copier mes 30 frames en 30 images et ensuite les importer, j'aimerais fortement savoir s'il existe un quelconque artifice permettant à RMXP de lire et jouer les fichiers .GIF (en l'occurrence par dessus une image BG si possible.

Merci bien,

~Seri


Dernière édition par Seri le Mer 06 Nov 2013, 23:31, édité 1 fois
Revenir en haut Aller en bas
Invité
Invité
Anonymous



[Question bête] XP et les vifs [Résolu] Empty
MessageSujet: Re: [Question bête] XP et les vifs [Résolu]   [Question bête] XP et les vifs [Résolu] EmptyMer 11 Sep 2013, 18:48

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
Il y a ce script qui fonctionne avec cette dll: http://www.mediafire.com/?ljpcp231lhag94n

Et ça fonctionne comme ceci:
Code:
@gif = GifSprite.new("fichier.gif")
@gif.x = 25
@gif.z = 10
@gif.opacity = 128
# etc...
Crédits à Brendan75. (:

Mais sinon, il y a plein de programmes pour extraire chaque image d'un gif animé. C'est moins lourd. Si tu préfères cette méthode, mais que tu ne trouves pas, MP moi, je te le fais!
Revenir en haut Aller en bas
Seri
Modérateur
Modérateur
Seri


Masculin
Nombre de messages : 558
Age : 35
Projet(s) en cours : Oliver
Niveau Rpg Maker : Se débrouille
Jeux Préférés : FF9,FF12, Chrono Cross
Date d'inscription : 10/07/2012

[Question bête] XP et les vifs [Résolu] Empty
MessageSujet: Re: [Question bête] XP et les vifs [Résolu]   [Question bête] XP et les vifs [Résolu] EmptyMer 11 Sep 2013, 19:20

Merci bien, je testerai. Le problème de l'extraction des images d'un gif c'est que si ton gif est constitué d'une centaines d'images tu dois te taper autant de "Afficher une image". Et c'est franchement lourd pour quelque chose de pas franchement capital... C'est ce que j'aurais fait sur 2k3, mais puisque ce projet sera bien mieux en 640x480, je prends XP.

~Seri
Revenir en haut Aller en bas
Invité
Invité
Anonymous



[Question bête] XP et les vifs [Résolu] Empty
MessageSujet: Re: [Question bête] XP et les vifs [Résolu]   [Question bête] XP et les vifs [Résolu] EmptyMer 11 Sep 2013, 20:20

Oh, avec une boucle en script, ça se fait vite.
Et de rien, ça me fait plaisir d'aider dès que je peux.
Revenir en haut Aller en bas
Contenu sponsorisé





[Question bête] XP et les vifs [Résolu] Empty
MessageSujet: Re: [Question bête] XP et les vifs [Résolu]   [Question bête] XP et les vifs [Résolu] Empty

Revenir en haut Aller en bas
 
[Question bête] XP et les vifs [Résolu]
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Resolu]question sur les cofffres
» une ch'tit question
» Question sur Events

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Fusion :: ZONE D'ENTRAIDE :: Questions sur Events & Rpg Maker-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser