Activity Team/Sugar-sprites

From Sugar Labs
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Sugar sprites library

While not yet an official part of Sugar, there is a simple sprites library, sprites.py, that is used by many activities, including Turtle Art, Visual Match, Slideruler, Cardsort, Erikos, etc.

sprites.py is a simple sprites library for managing graphics objects, 'sprites', on a canvas. It manages multiple sprites with methods such as move, hide, set_layer, etc.

There are two classes:

  • class Sprites maintains a collection of sprites.
  • class Sprite manages individual sprites within the collection.

Example usage

The basic work flow is to first create a Sprites instance to manage the sprite collection. Then create and use individual sprites.

       # Import the classes into your program.
       from sprites import Sprites, Sprite
       # Create a new sprite collection for a gtk Drawing Area.
       my_drawing_area = gtk.DrawingArea()
       self.sprite_list = Sprites(my_drawing_area)
       # Create a "pixbuf" (in this example, from SVG).
       my_pixbuf = svg_str_to_pixbuf("<svg>...some svg code...</svg>")
       # Create a sprite at position x1, y1.
       my_sprite = sprites.Sprite(self.sprite_list, x1, y1, my_pixbuf)
       # Move the sprite to a new position.
       my_sprite.move((x1+dx, y1+dy))
       # Create another "pixbuf".
       your_pixbuf = svg_str_to_pixbuf("<svg>...some svg code...</svg>")
       # Create a sprite at position x2, y2.
       your_sprite = sprites.Sprite(self.sprite_list, x2, y2, my_pixbuf)
       # Assign the sprites to layers.
       # In this example, your_sprite will be on top of my_sprite.
       my_sprite.set_layer(100)
       your_sprite.set_layer(200)
       # Now put my_sprite on top of your_sprite.
       my_sprite.set_layer(300)
# method for converting SVG to a gtk pixbuf
def svg_str_to_pixbuf(svg_string):
    pl = gtk.gdk.PixbufLoader('svg')
    pl.write(svg_string)
    pl.close()
    pixbuf = pl.get_pixbuf()
    return pixbuf

The Sprites Class

class Sprites

methods:

   def __init__(self, canvas, area=None, gc=None)
       self.canvas
       self.area
       self.gc
       self.cm
       self.list = []
   def get_sprite(self, i)
   def length_of_list(self)
   def append_to_list(self, spr)
   def insert_in_list(self, spr, i)
   def remove_from_list(self, spr):
   def find_sprite(self, pos):
   def redraw_sprites(self):

The Sprite Class

class Sprite

methods:

   def __init__(self, sprites, x, y, image):
       self.layer = 100
       self.labels = []
       self.images = []
   def set_image(self, image, i=0, dx=0, dy=0):
   def move(self, pos):
   def move_relative(self, pos):
   def get_xy(self):
   def get_dimensions(self):
   def get_layer(self):
   def set_shape(self, image, i=0):
   def set_layer(self, layer):
   def set_label(self, new_label, i=0):
   def set_margins(self, l=0, t=0, r=0, b=0):
   def set_font(self, font):t)
   def set_label_color(self, rgb):
   def set_label_attributes(self, scale, rescale=True, horiz_align="center",
                            vert_align="middle", i=0):
   def hide(self):
   def inval(self):
   def draw(self):
   def hit(self, pos):
   def draw_label(self):
   def label_width(self):
   def label_safe_width(self):
   
   def label_safe_height(self):
   
   def label_left_top(self):
   def get_pixel(self, pos, i=0):