hace como un mes que estaba trabajando en un framework basado en python-sfml llamado Thomas-Aquinas (de Santo Tomás de Aquino ) para facilitarme la vida desarrollando juegos (y vender en Desura, jaja!!) ya que digamos, en éste framework pongo todo mis conocimientos en el tema del desarrollo de videojuegos usando herramientas que ya conozco, etc.
Bueno, al grano: tengo unas dudas con el uso de unos metodos on_event y on_update. Sucede que thomas-aquinas en su version v0.0.3-alpha cuenta con un manejador de escenarios y una clase para derivar escenarios, los desarrolle mirando el codigo del proyecto Asadetris. Sin embargo, haciendo unas pruebas note que puedo usar on_event para hacer lo que normalmente se haria en on_update, la cosa es, no sé con exactitud que escribiria en on_update xd.
¿Me explico? escribí el siguiente codigo para probar mi framework:
# encoding: utf-8
from src.scenefactory import AbstractScene
import sfml
class Helloworld(AbstractScene):
def __init__(self, scenemanager):
AbstractScene.__init__(self)
self.__tipografia = sfml.Font.get_default_font()
self.texto = sfml.Text("Escena 1")
self.texto.font = self.__tipografia
self.texto.character_size = 40
self.texto.style = sfml.Text.BOLD
self.texto.color = sfml.Color.WHITE
self.scenemanager = scenemanager
def on_event(self, event):
if type(event) is sfml.MouseButtonEvent and\
event.pressed:
if self.texto.character_size < 100:
self.texto.character_size += 1
else:
self.texto.character_size = 9
def on_update(self):
pass
def on_draw(self, window):
window.draw(self.texto)
def __str__(self):
return "<Scene: HelloWorld, file: {0}>".format(__file__)
como pueden apreciar, no estoy usando on_update para nada, más bien, estoy usando on_event para actualizar mi objeto texto ¿no sé supone que debo usar on_update para actualizar mi objeto texto? estoy actualizando la logica con on_event en lugar de usar on_update...
bueno, en fin, mire codigo de otros proyectos y pues me enredo un poco entender la manera en que usan on_update, si me pueden ayudar, les agradeceria mucho :'D.
Si se lo preguntan, sí, el framework es usable (y con GPL3, así que no lo podeis usar para desarrollar software privativo), pero no es apto para newbies, que de ser así, les recomedaria usar Pilas Engine!.
acá les dejo el contenido de scenefactory.py, que contiene la clase AbstractScene:
# coding: utf-8
# This file is part of Thomas Aquinas.
#
# Thomas Aquinas is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Thomas Aquinas is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Thomas Aquinas. If not, see <http://www.gnu.org/licenses/>.
#
# veni, Sancte Spiritus.
import logging
from thirdparty.pytmx import tmxloader
import common
class AbstractScene:
"""Escena abstracta del juego.
Las escenas representan partes visibles del juego, ya sea una
pantalla de introduccion, creditos, o un campo de batalla.
Para poder hacer escenas funcionales, debe derivar de esta clase
cualquier escena que necesite."""
def __init__(self):
# self.scenemanager = scenemanager
# Para cambiar una escena puede hacer lo siguiente:
# self.scenemanager.changescene(nuevaescena)
# Y eso es todo
pass
def on_update(self):
"El manejador de escenas llamara este metodo para actualizar la logica."
raise NotImplemented("Implemente el metodo on_update.")
def on_event(self, event):
"El manejador de escenas llamara este metodo cuando aya eventos."
raise NotImplemented("Implemente el metodo on_event.")
def on_draw(self, window):
"El manejador de escenas llamara este metodo para dibujar la escena."
raise NotImplemented("Implemente el metodo on_draw.")
def loadmap(self, mapfilepath):
"""Carga el mapa de la respectiva escena.
No es necesario reimplementar éste metodo.
Todos los archivos de mapa a leer deben ser en
formato tmx, del software Tiled Map Editor
http://www.mapeditor.org/"""
mapfilepath = common.conf.joinpaths(common.conf.getrootfolder(),
"maps", mapfilepath)
self.__tmxmapfile = mapfilepath
self.__tmxmapdata = tmxloader.load_tmx(self.__tmxmapfile)
## TODO: Para saber más sobre scrolling de mapas enormes
# Buscar el proyecto lib2d de Bitcraft en pygame.org
def __str__(self):
"Util para darle un nombre a tu escena."
raise NotImplemented("Implemente el metodo __str__")
# por ejemplo:
# return "<Scene: Escena #1, File: {0}>".format(self.__tmxmapfile)
# o como usted más prefiera