14 respuestas

  1. inedit00
    12/06/2010

    admin, para mejorar el código, he hecho dos versiones, la molona y la otra, mas «procedimental» y mas fácil de entender. Las dos deberían hacer lo mismo ( aunque no he «compilado» ninguna de las dos ): La molona me ha quedado así:

    mapa, x, y, z = self.capas, xrange(len(self.capas)), xrange(self.height), xrange(self.width)
    evalua = lambda x: self.tileset(x) if x else None
    for i in x:
        for f in y:
            for c in z:
                mapa[i][f]1 = evalua(self.capas[i][f]1)
    self.mapa = mapa
    

    El modo mas «procedimental» queda así:

    self.mapa = self.capas
    for i in xrange(len(self.capas)):
        for f in xrange(self.height):
            for c in xrange(self.width):
                element = self.capas[i][f]1
                if element:
                    self.mapa[i][f]1 = self.tileset[element]
                else:
                    self.mapa[i][f]1 = None
    

    Que diferencia hay? Pues bueno, primero que utilizo XRANGE y no RANGE. Cual es la diferencia? Pues es algo substancial.

    Si yo hago un range(10000000) se computan todos sus elementos [1,2,3,4,5…1000000], y después se itera por cada uno de los elementos. Pero si lo hago con un XRANGE: xrange(1000000), tansolo se computa el elemento que necesita el FOR, osea, no se computa toda la lista entera, sinó que va creando elementos a medida que el FOR los va necesitando.

    Parece una tontería, pero así se optimiza el código. Estos procesos se llaman «lazy». Y por otra parte, antes de llegar a la condición he guardado el valor de «element». Esto se puede hacer así, otra vez, por un tema de rendimiento. Como «self.capas[i][f][ c ]» está repetido dos veces, Python tendrá que iterar dos veces para encontrar esta posición, en cambio si la guardamos, tan solo tiene que iterar la primera vez para tener el valor deseado. Esta segunda optimización no creo que se note demasiado ( a diferencia del RANGE o XRANGE ), pero seguro que también ayuda.

    Tan solo dejo ideas para resolver el mismo problema con diferentes enfoques. Saludos!!

  2. inedit00
    12/06/2010

    :S OWNED. No se que le ha pasado al formato de mi comentario, pero se ha editado con todo movido. Espero que se entienda algo.

  3. admin
    12/06/2010

    El plugin de código ha leido y lo ha interptretado como que estabas escribiendo código C, ahora te lo arreglo.

    Por cierto, puedes usar las etiquetas [«python»] (sin comillas) para poner código.

    En cuando a lo que propones, en cuanto corrija el comentario comento.

  4. admin
    12/06/2010

    Ya he hecho tu comentario más legible.

    En cuando a lo que dices con el uso de xrange, pues no lo sabía que python optimizaba su uso. Es algo a tener en cuenta, sobre todo para juegos donde es importante optimizar.

  5. Bline
    12/06/2010

    A este paso te montas un rpgmaker antes de que lo terminen los chicos del easyrpg xD

  6. admin
    13/06/2010

    Ohh el proyecto EasyRPG es más grande que esto, ojala sigan por buen puerto, conozco a varios de sus desarrolladores.

  7. Diego
    30/09/2011

    Buenas, escribo aquí porque no se bien donde ubicar la pregunta: Actualmente estoy desarrollando una aplicación con pygame que sería del tipo plataformas, el escenario esta compuesto por tiles, o sea un map[][], me encuentro con el siguiente problema, quisiera ver como poder mover una plataforma compuesta de tiles, o sea si existe algún método en pygame, python, o algún ejemplo que muestre como afrontar el problema en el cual me encuentro. El movimiento tendría que ser horizontal, de ir y venir (no se si me explico bien). En mente tengo una solución pero realmente la veo compleja por eso mismo me gustaría averiguar si existe algún método que permita realizar el requerimiento de una forma «simple». Muchas gracias!!

  8. adrigm
    30/09/2011

    Diego, revisa los bloques móviles de este miniengine que hice en su día:

    http://razonartificial.com/2010/08/muestra-del-engine-de-pyia/

  9. Pedro
    01/10/2011

    adrigm, uso Geany y tengo un error al ejecutar el código:

    File «maps.py», line 61
    if self.capas[i][f]1:
    ^
    Syntax Error: Invalid syntax

    Cual es el problema?

  10. Pedro
    01/10/2011

    Bueno, la flecha «^» señala al 1.

  11. Diego
    03/10/2011

    adrigm, perdón que respondo recién ahora pero no había podido probar tu ejemplo, tengo una consulta, tu en ese ejemplo mueves de a un tile, y mi problema es como hacer para mover de a varios, o sea una plataforma que este compuesta por tiles de la siguiente forma: mapEscenario = [ [55][20], [56][20], [57][20], [58][20], [59][20], [60][20] ] no se si se entiende??, y bueno ver si existe algún algoritmo que reconozca la plataforma o sea 55,56,57,58,59,60 y pueda moverla horizontalmente de un lado a otra?, gracias!

  12. Diego
    18/10/2011

    Hola!, he tenido unos cambios de rumbo en cuanto al juego de plataformas que estoy haciendo y decidí hacerlo con plataformas que son sprites, para así controlar las mismas (movimientos horizontales, verticales, girar sobre su eje, etc,) pero quisiera saber si existe algún ejemplo q muestre como es la mejor forma de trabajar con estas plataformas (sprites), se que existen distintos group en pygame, donde debería agrupar a mis plataformas, si las tengo que actualizar todo el tiempo al igual que lo hago con mi personaje sprite, etc, o sea como trabajar con sprites como plataformas. Saludos! Diego

Responder

 

 

 

Volver arriba
móvil escritorio