From 57ef8917ceaf582c88417112ef0468f6c94b6823 Mon Sep 17 00:00:00 2001 From: Agustin Zubiaga Date: Tue, 09 Oct 2012 19:33:24 +0000 Subject: Add backogrunds Signed-off-by: Agustin Zubiaga --- diff --git a/game.py b/game.py index 27c79ac..21db535 100644 --- a/game.py +++ b/game.py @@ -1,15 +1,20 @@ #!/usr/bin/env python import glucosa +import gtk + +AURORA = 'images/aurora.png' +EVENING = 'images/evening.png' +NIGHT = 'images/night.png' class AntFarm(glucosa.GameArea): def __init__(self): glucosa.GameArea.__init__(self) - - self.backgroud = glucosa.Image('images/backgroud.png') + self._set_background(NIGHT) + image = glucosa.Image('images/aceituna.png') sprite = glucosa.Sprite(image, 100, 100, 18, 18, scale=2) self.add_sprite(sprite) @@ -17,6 +22,11 @@ class AntFarm(glucosa.GameArea): self._events = glucosa.Events(self) self._events.connect('mouse-moved', self._mouse_move, sprite) + def _mouse_move(self, widget, event, sprite): sprite.x, sprite.y = event['x'], event['y'] + def _set_background(self, bg): + alloc = self.get_allocation() + self.set_background(bg, alloc.width, alloc.height) + diff --git a/glucosa.py b/glucosa.py index 1ac2414..978206b 100644 --- a/glucosa.py +++ b/glucosa.py @@ -363,7 +363,7 @@ class Sprite(gobject.GObject): x = property(get_x, set_x, doc="Define la posicion horizonal") y = property(get_y, set_y, doc="Define la posicion vertical") - + def get_left(self): return self.x - (self.image.width * self.scale / 2) @@ -393,8 +393,8 @@ class Sprite(gobject.GObject): top = property(get_top, set_top, doc="Define la posición superior del Sprite") bottom = property(get_bottom, set_bottom, doc="Define la posición inferior del Sprite") - - + + class Text: """Muestra un texto en la pantalla. @@ -479,17 +479,17 @@ class Events(gobject.GObject): """ - # No funciona con gobject: + # No funciona con gobject: # Solo puede existir una instancia de este objeto en el programa. #__metaclass__ = Singleton __gsignals__ = {'mouse-moved': (gobject.SIGNAL_RUN_FIRST, None, [object]), - 'mouse-button-pressed': (gobject.SIGNAL_RUN_FIRST, None, [object]), - 'mouse-button-released': (gobject.SIGNAL_RUN_FIRST, None, [object]), - 'mouse-scroll-up': (gobject.SIGNAL_RUN_FIRST, None, [object]), - 'mouse-scroll-down': (gobject.SIGNAL_RUN_FIRST, None, [object]), - 'key-pressed': (gobject.SIGNAL_RUN_FIRST, None, []), - 'key-released': (gobject.SIGNAL_RUN_FIRST, None, [])} + 'mouse-button-pressed': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-button-released': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-scroll-up': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'mouse-scroll-down': (gobject.SIGNAL_RUN_FIRST, None, [object]), + 'key-pressed': (gobject.SIGNAL_RUN_FIRST, None, []), + 'key-released': (gobject.SIGNAL_RUN_FIRST, None, [])} def __init__(self, widget): gobject.GObject.__init__(self) @@ -497,17 +497,17 @@ class Events(gobject.GObject): self._widget = widget # Conectamos los eventos de GTK. - self._widget.connect('motion-notify-event', + self._widget.area.connect('motion-notify-event', self._mouse_move) - self._widget.connect('button-press-event', + self._widget.area.connect('button-press-event', self._mouse_button_press) - self._widget.connect('button-release-event', + self._widget.area.connect('button-release-event', self._mouse_button_released) - self._widget.connect('key-press-event', + self._widget.area.connect('key-press-event', self._key_pressed) - self._widget.connect('key-release-event', + self._widget.area.connect('key-release-event', self._key_released) - self._widget.connect('scroll-event', + self._widget.area.connect('scroll-event', self._mouse_scroll) self._keys_pressed = [] @@ -736,7 +736,8 @@ class Pencil: context.stroke() -class GameArea(gtk.DrawingArea): + +class GameArea(gtk.Fixed): """Es el area donde el juego se dibujará Permite ser embebida en cualquier contenedor de gtk, ya que es un @@ -754,28 +755,39 @@ class GameArea(gtk.DrawingArea): } def __init__(self): - gtk.DrawingArea.__init__(self) + gtk.Fixed.__init__(self) self.sprites = [] self._timeout = None - self.backgroud = None + self.background = gtk.Image() + self.add(self.background) - self.connect("expose-event", self._on_draw) + self.area = gtk.DrawingArea() + self.add(self.area) - self.set_events( gtk.gdk.BUTTON_PRESS_MASK + self.area.connect("expose-event", self._on_draw) + + self.area.set_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.KEY_RELEASE_MASK | gtk.gdk.KEY_PRESS_MASK | gtk.gdk.POINTER_MOTION_MASK) - self.set_flags (gtk.CAN_FOCUS) + self.area.set_flags(gtk.CAN_FOCUS) + + self.show_all() def add_sprite(self, sprite): """Agrega un sprite a el area de juego""" self.sprites.append(sprite) sprite.connect('update', self._update) + def set_background(self, path, width, height): + """Define el fondo del area de juego""" + pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(path, width, height) + self.background.set_from_pixbuf(pixbuf) + def set_update_loop(self, fps=60): """Define un bucle de actualizacion si fps = -1 el bucle se detendra y dibujara solo cuando un sprite cambie""" @@ -793,7 +805,7 @@ class GameArea(gtk.DrawingArea): for sprite in self.sprites: sprite.update() - gobject.idle_add(self.queue_draw) + gobject.idle_add(self.area.queue_draw) return True def _on_draw(self, widget, event): @@ -801,11 +813,6 @@ class GameArea(gtk.DrawingArea): window_size = self.get_window().get_size() fill(context, (50,50,50), window_size) - # Dibuja el fondo - if not self.backgroud == None: - self.backgroud.blit(context, 0, 0, scale=1, rotation=0, anchor_x=0, - anchor_y=0, flip=False) - # Se encarga de dibujar los sprites for sprite in self.sprites: sprite.draw(context) diff --git a/images/aurora.png b/images/aurora.png new file mode 100644 index 0000000..64d3371 --- /dev/null +++ b/images/aurora.png Binary files differ diff --git a/images/aurora.svg b/images/aurora.svg new file mode 100644 index 0000000..c787ee9 --- /dev/null +++ b/images/aurora.svg @@ -0,0 +1,140 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/backgroud.png b/images/backgroud.png deleted file mode 100644 index 441ebec..0000000 --- a/images/backgroud.png +++ /dev/null Binary files differ diff --git a/images/evening.png b/images/evening.png new file mode 100644 index 0000000..8a65a0a --- /dev/null +++ b/images/evening.png Binary files differ diff --git a/images/evening.svg b/images/evening.svg new file mode 100644 index 0000000..5d03a4c --- /dev/null +++ b/images/evening.svg @@ -0,0 +1,140 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/night.png b/images/night.png new file mode 100644 index 0000000..0d84dd4 --- /dev/null +++ b/images/night.png Binary files differ diff --git a/images/night.svg b/images/night.svg new file mode 100644 index 0000000..1c30ecc --- /dev/null +++ b/images/night.svg @@ -0,0 +1,139 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v0.9.1