of course i would never use a gif animation in my programs.
thats just a very rudimentare code and it should only display how easy it is to dig in a gif, fli or in your own format by using pil.
this code runs a gif (uncompressed) animation:
'''
Created on 27.06.2011
@author: dirk hochegger
'''
from direct.directbase import DirectStart
from pandac.PandaModules import *
from PIL import *
import Image, ImageSequence
class gifANIM():
def __init__(self):
self.timer = 0
self.speed = 4
self.frame = 0
im = Image.open("yourGIF.gif")
self.tex = {}
id = 0
for frame in ImageSequence.Iterator(im):
self.tex[id] = Texture()
buffer = PTAUchar.emptyArray(0)
buffer.setData(frame.tostring())
self.tex[id].setFormat(Texture.FRgb ) # format information "http://www.panda3d.org/reference/1.7.2/python/classpanda3d.core.Texture.php#ab4e88c89b3b7ea1735996cc4def22d58" if you get this error back -> AssertionError: compression != CM_off || image.size() == do_get_expected_ram_image_size()
self.tex[id].setXSize(im.size[0])
self.tex[id].setYSize(im.size[1])
self.tex[id].setRamImage(CPTAUchar(buffer), Texture.CMOff)
id+=1
self.ts = TextureStage('ts')
self.screen = self.createCARD(self.tex[20],1,1)
taskMgr.add(self.play,"play")
def createCARD(self,
tex,
u,
v):
card = CardMaker("gifanim")
tile = NodePath(card.generate())
tile.reparentTo(render2d)
tile.setTexScale(self.ts,u,v)
tile.setTexture(self.ts, tex)
return tile
def play(self,task):
self.timer +=1
if self.timer > self.speed:
self.screen.setTexture(self.ts,self.tex[self.frame])
if self.frame < len(self.tex)-1:
self.frame += 1
else:
self.frame = 0
self.timer = 0
return task.cont
g=gifANIM()
run()