Seri Modérateur
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
| Sujet: [Question bête] XP et les vifs [Résolu] Mer 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 | |
|
Invité Invité
| Sujet: Re: [Question bête] XP et les vifs [Résolu] Mer 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/?ljpcp231lhag94nEt ç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! |
|
Seri Modérateur
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
| Sujet: Re: [Question bête] XP et les vifs [Résolu] Mer 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 | |
|
Invité Invité
| Sujet: Re: [Question bête] XP et les vifs [Résolu] Mer 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. |
|
Contenu sponsorisé
| Sujet: Re: [Question bête] XP et les vifs [Résolu] | |
| |
|