|
|
from PySFML import sf
class AnimatedSprite( sf.Sprite ):
def __init__( self, image, columns=1, rows=1, sequence=None, columnwidth=None, rowheight=None ):
super( AnimatedSprite, self ).__init__( image )
totalwidth, totalheight = self.GetSize()
if columnwidth: self.columnwidth = columnwidth
else: self.columnwidth = int( totalwidth / columns )
if rowheight: self.rowheight = rowheight
else: self.rowheight = int( totalheight / rows )
if sequence:
self.sequence = sequence
else:
self.sequence = [ number for number in range( 1, ( columns * rows ) + 1 ) ]
# create a frames list of column and row tuples
self.frames = [ (x,y) for y in range( 1, rows + 1 ) for x in range( 1, columns + 1 ) ]
self.current = self.tick = self.complete = 0
# set the first frame
self.Next( self.tick )
def Next( self, tickrate = 12 ):
"""
Pass an optional tickrate.
If tick is greater or equal to tickrate:
Move the Sub Rectangle or view to the Next position.
Set complete to True when sequence finishes.
"""
self.tick += 1
if self.tick >= tickrate:
self.tick = 0
column, row = self.frames[ self.sequence[ self.current ] - 1 ]
subrect = sf.IntRect(
self.columnwidth * ( column - 1 ),
self.rowheight * ( row - 1 ),
self.columnwidth * column,
self.rowheight * row
)
self.SetSubRect( subrect )
self.current += 1
if self.current >= len( self.sequence ):
self.complete = True
self.current = 0

Source: https://foxhop.net/f3a7e91f-2f95-11f1-b18c-e86a64d24d78/python-pysfml-animatedsprite-class-supplies-next-method-to-adjus
Snapshot: 2026-05-25T01:47:24Z
Generator: Remarkbox 1527ef7