Sujet n°9341
Posté par
Brendan75 le
6 Mar - 13:09 (2011)Titre :
Lecteur de GIFBonjour !
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.
Posté par
Tinei le
6 Mar - 15:24 (2011)Oh Cooooooooooooooooooooool !
Merciiiiiiiiiiiiiiii
Bravoooooooooooooooooooooo !
Oh la la depuis le temps que j'attend ça !
Merci infiniment.
Posté par
Wildstylez le
6 Mar - 15:41 (2011)Merci brendan. Par contre pour les combats, si on veut changer les fronts, y'aura toujours le ".png"qui sera compté nan ?
Posté par
Brendan75 le
6 Mar - 15:48 (2011)En effet, mais il suffit de modifier un peu les lignes 200 et suivantes du script "Pokemon".
Posté par
Wildstylez le
6 Mar - 16:42 (2011)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 ).
Posté par
Brendan75 le
6 Mar - 17:15 (2011)Il faut updater les images régulièrement pour voir l'animation. Tu l'as fait ?
Posté par
Wildstylez le
6 Mar - 17:17 (2011)Hum... C'est-à-dire ? ^^'
Posté par
Brendan75 le
6 Mar - 17:47 (2011)bah mettre sprite.update quoi... Si ça ne 'évoque rien, il faut revoir tes cours de RGSS.
Posté par
Tinei le
6 Mar - 19:04 (2011) 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.
Posté par
Wildstylez le
6 Mar - 19:14 (2011)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.
Posté par
Gryfenfeu le
6 Mar - 20:36 (2011)Ce script marche t'il avec les sprites animé que Speed a poster dans les ressources ?
Posté par
Wildstylez le
6 Mar - 21:26 (2011)Oui, mais il y a des bugs graphiques en fait. Donc je sais pas si ça vient de moi, des gifs, ou du script.
Posté par
Brendan75 le
6 Mar - 22:37 (2011)Quels bugs graphiques ?
Posté par
Oli-link le
7 Mar - 18:03 (2011)comment faire pour que les front et les backs des pokémons soit en gif?
Posté par
Wildstylez le
8 Mar - 13:37 (2011) Brendan75 a écrit: |
Quels bugs graphiques ?
|
J'ai ça par exemple :
Posté par
Brendan75 le
8 Mar - 18:51 (2011)Je pense qu'il doit s'agir du gif, ici.
Posté par
Dark Palkia le
10 Mar - 18:07 (2011)sa me met syntax error a la ligne 8 :?
Posté par
Brendan75 le
10 Mar - 18:09 (2011)Cette ligne est vide, je ne vois aucune erreur possible, essaies de copier/coller le code à nouveau.
Posté par
sassouna le
14 Mar - 18:59 (2011)Merci beaucoup c'est super par contre t'aurais pas le pack des pokemon de la 5G animé? stp
Posté par
Giratinaprimal le
15 Mar - 17:39 (2011)Où placer le fichier gif.dll ? Il n'est pas détecté et...
RuntimeError
LoadLibrary: gif.dll
Posté par
Brendan75 le
16 Mar - 08:16 (2011)Dans le premier dossier du jeux, là où il y a le rgss, le fichier game, etc.
Posté par
Giratinaprimal le
16 Mar - 13:39 (2011)Même dans le dossier racine du projet, ça plante.
Rmq : j'ai mis ce fichier dans le dossier C:\Windows\System32
sur Windows7.
Posté par
sassouna le
19 Mar - 14:23 (2011)lorsque je fais un combat le pokemon ennemi s'affiche meme pas !
Posté par
Brendan75 le
19 Mar - 17:23 (2011)Comment veux tu que je t'aide, c'est toi qui a fait tes scripts, non ?
Posté par
Slash le
21 Mar - 20:23 (2011)a étudier et a approfondir mais voila un script qui semble intéressant
Posté par
marcelinhopb le
15 Mai - 15:53 (2011)Bonjour est ici en erreur à la ligne 20 je vous demande de m'aider en
s'il vous plaît.
Je ne suis pas français ni l'anglais, je suis Brésilien, je suis l'aide de Google pour traduire.
J'utilise le 5G PSP DS vous pouvez me dire si elle prend la
Script?
Posté par
Brendan75 le
17 Mai - 06:54 (2011)Un log complet s'il te plait. ^^'
Posté par
Yorick le
14 Aoû - 11:14 (2011)Je suis désolé pour le gros Néchropost :(
Mais le fichier Gif.dll n'est plus disponible, donc le lien est mort =S
Je suis vraiment désolé =(
Posté par
Brendan75 le
18 Aoû - 14:18 (2011)J'ai remis un lien.
Posté par
Guigui28240 le
28 Aoû - 01:40 (2011)Désolé si je fais du necroposte mais je voulais savoir où mettre ses sprites animés? Merci
Posté par
Brendan75 le
28 Aoû - 08:57 (2011)Dans un script.
Posté par
Guigui28240 le
28 Aoû - 13:03 (2011)Ok je sais pas comment on fait mais juste comment il faut les nommer ect merci
Posté par
Brendan75 le
28 Aoû - 15:49 (2011)C'est marqué dans le premier post, il faut lire avant de poser des questions...
Posté par
Guigui28240 le
28 Aoû - 16:32 (2011)ok merci je me débrouillerai
Posté par
Warp' le
11 Jan - 03:36 (2012)Je suis désolé de faire du nécropost, mais le lien du DLL est mort.
Ça serait bien si le DLL pouvait être uploadé.
Merci à l'avance.
Posté par
Brendan75 le
11 Jan - 07:58 (2012)C'est bon, lien mis à jour.
Posté par
Zohran le
6 Aoû - 12:51 (2012)Euh, désolé de te réembêté avec cela mais j'ai un soucis, dans un event j'ai crée un gif
donc:
@prof = GifSprite.new("Graphics/Pictures/Prof.gif")
@prof.setup("Graphics/Pictures/Prof.gif")
@prof.x = 90
@prof.y = 45
J'active un interrupteur local A
Dans un autre event en parallèle, dès que cet interrupteur local est activé (donc en condition), j'ai fait appel de script:
@prof.update
... et devine quoi??? Le gif ne s'anime pas, j'y comprend rien??? Une aide svp?
Pourtant l'event de l'update est bien en parallèle c'est à rien y comprendre !
Posté par
Moy le
11 Aoû - 17:44 (2012)Les interrupteurs locaux sont propre à l'évent, donc si tu active un interrupteur local sur un évent, il n'est pas activé sur un autre
Posté par
Lonel le
15 Aoû - 18:15 (2012)J'ai utilisé le lecteur de gif, et quand j'ai testé, ça a planté. Apparemment, c'est dans le script que ça bug.
Voici ce que ça disant dans le fichier log:
---------- Erreur de script : évènement ----------
----- Type
Errno::ENOENT
----- Message
Section200:58:in `initialize'No such file or directory - GraphicsPicturesintro-prof-érable.gif
----- Position de l'évènement
MAP 1 EVENT 2
SCRIPT
@gif = GifSprite.new("Graphics\Pictures\intro-prof-érable.gif")
@gif.x = 320
@gif.z = 240
@gif_x = 200.0
@gif_y = 200.0
@gif.opacity = 128
@gif.blend_type = 1
@gif.duration = 0
@gif.target_x = @x
@gif.arget_y = @y
@gif.target_zoom_x = @zoom_x
@gif.target_zoom_y = @zoom_y
@gif.target_opacity = @opacity
@gif.tone = Tone.new(0, 0, 0, 0)
@gif.tone_target = Tone.new(0, 0, 0, 0)
@gif.tone_duration = 0
@gif.angle = 0
@gif.rotate_speed = 0
----- Backtrace
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : GIF | Ligne : 58 | Méthode : in `open'
Script : GIF | Ligne : 58 | Méthode : in `setup'
Script : GIF | Ligne : 48 | Méthode : in `initialize'
Script : Loading | Ligne : 1 | Méthode : in `new'
Script : Loading | Ligne : 1 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `eval'
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Scene_Map | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `old_update'
Script : TempsJourNuit | Ligne : 248 | Méthode : in `update_passminimap'
Script : Minimap | Ligne : 44 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `old_main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `old_main'
Script : TempsJourNuit | Ligne : 237 | Méthode : in `main_passminimap'
Script : Minimap | Ligne : 31 | Méthode : in `main'
Script : Main | Ligne : 57
Esc-ce que c'est moi qui ai fait une erreur dans la commande, où est-ce que c'est dans le script? Parce que mon fichier est bien là où j'ai dit au logiciel de le chercher...
Posté par
Maxime le
15 Aoû - 19:19 (2012)Il te manque le fichier .gif.
Posté par
Lonel le
15 Aoû - 20:19 (2012)Justement, non! Ce qui est inexplicable, c'est que le fichier est bel et bien là. Je l'ai vérifié, c'est d’ailleurs la première chose que j'ai faite en voyant le rapport d'erreur.
Posté par
Guigui28240 le
15 Aoû - 21:42 (2012)Salut tout d'abord ce qui n'es pas normal c'est que le message dit qu'il manque :
Section200:58:in `initialize'No such file or directory - GraphicsPicturesintro-prof-érable.gif
Apparament il y a un big qui fait que le fichier doit s'appeler GraphicsPicturesintro-prof-érable.gif regarde dans le script de brendan si il ne manque pas des "/" et au pire si tu pourrais donner le nom de ton navigateur sa serait encore mieux
Posté par
Lonel le
15 Aoû - 22:09 (2012)Je crois que j'ai trouvé, mais je ne suis pas sûr. Je remarque que j'ai mis
@gif_x = 200.0
@gif_y = 200.0
au lieux de
@gif.zoom_x = 200.0
@gif.zoom_y = 200.0
C'est peut-être ça, même si je ne vois pas pourquoi il ne trouverais pas le fichier, qui est bien à sa place, à cause de ça.
Posté par
Guigui28240 le
17 Aoû - 16:48 (2012)Quel est ton navigateur web?
Posté par
Laito' le
17 Aoû - 21:40 (2012) Guigui28240 a écrit: |
Quel est ton navigateur web? |
Quel est l'intérêt de cette question?
On parle de script pas d'internet. Jvois vraiment pas ce que tu veux dire.
encore un qui veut jouer les héros....
Posté par
Pαlвσlѕку le
17 Aoû - 23:33 (2012)L'erreur vient de toi, pas du script.
Tu as écris :
Code: |
@gif = GifSprite.new("Graphics\Pictures\intro-prof-érable.gif") |
Or c'est / que tu dois mettre et non \. Pour le script, \ = "" donc aucun caractère.
Ainsi, il te suffit de corriger ton code :
Code: |
@gif = GifSprite.new("Graphics/Pictures/intro-prof-érable.gif") |
Le navigateur n'a rien à voir là-dedans, mais pour information il utilise Mozilla Firefox.
Posté par
Guigui28240 le
18 Aoû - 19:09 (2012)Bah a un moment j'ai eu un script qui marchait pas car j'etais sous chrome et puis en allant avec mozilla Firefox le script fonctionnait bien
Posté par
Zohran le
29 Nov - 13:30 (2012)Bonjour Brendan, cela faisait longtemps, actuellement j'intègre les gifs dans PSP 5G V0.2, ça marche bien, mais j'ai un soucis, un gros, je n'arrive pas à updater correctement le gif. Je m'explique, j'ai beau mettre @gif.update, lorsque dans pokémon statut ou dans un combat lorsque je change de pokémon, le gif reste toujours celui du 1er pokémon, mais il est animé !!!!
Donc cela ne viens pas d'un mauvais update???? Tu pourrais m'aider svp? (en plus c'est le seul bug que j'ai...)
Posté par
og_loc-TATOO le
29 Nov - 16:56 (2012)J'en profite au passage pour dire que le lien est mort ^^
Il faudrait le remettre à jour, j'en ai besoin ^^
Merci d'avance.
Posté par
Zohran le
29 Nov - 21:48 (2012)Tu peux récupérer la dll en téléchargeant pokemon essentials
EDIT: Brendan, laisse tomber, je n'intègrerais pas les gifs, c'est... juste trop instable...
Posté par
Master of Dragons le
9 Avr - 23:48 (2013)Moi ça m'intéresse de récupérer le gif.dll