Mini clon de Megaman X4

Losersjuegos cuenta con una secciones de ejemplos en su web. Utilice esta sección para consultar o proponer ideas acerca de ellos.

Mini clon de Megaman X4

Notapor kilohurts » Jue Abr 16, 2009 1:05 am

Hola a todos. No se si sea mi primer post, pero quisiera compartir lo que he logrado de todo un poco leyendo de acá y de allá. Espero que alguien esté interesado. Nos vemos muy pronto (voy a escribir la explicacion de mi algoritmo, si es que en verdad es uno :P). Saludos.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor endaramiz » Jue Abr 16, 2009 5:18 pm

Pues comparte! :lol: No veo ningún enlace ni nada...
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Notapor Juanxo » Jue Abr 16, 2009 6:38 pm

Se refiere a que lo compartirá cuando lo tenga. Esto es como un anuncio.
Normalmente no se suele hacer esto, sino que se abre el tema una vez hecho. jajajaja

Suerte en tu proyecto!!!!

Juanxo
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Por fin

Notapor kilohurts » Sab Abr 18, 2009 2:04 am

Hola a todos por fin puedo publicar este pequeño aporte, espero que les guste y sirva. El código fuente lo publivaré también pronto. Salu2 && byTe.

Link del artículo:

http://sites.google.com/site/xzerosite/Home/get_frame.pdf?attredirects=0
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor endaramiz » Sab Abr 18, 2009 12:56 pm

No estoy seguro de haber entendido lo que quieres hacer. Lo que yo he entendido es que quieres sacar un cuadro en concreto del spritesheet. Esto se suele hacer de una manera más sencilla. Si lo que quieres hacer es simplemente imprimir, que es lo que se suele hacer la mayoría de los casos con el spritesheet, se utiliza el tercer parámetro del blit.
Surface.blit(source, dest, area=None, special_flags = 0): return Rect

Se puede pasar un rectángulo opcional como argumento area. Este representa una porción mas pequeña de la superficie source a imprimir.
Y si lo que quieres es tener una nueva Surface con el sprite, podría crear una Surface bacía y luego dibujarle el Sprite con la técnica descrita anteriormente.

Igualmente te felicito por el algoritmo y las imágenes de la explicación, aunque más ineficiente, es bastante ingenioso.

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

:P

Notapor kilohurts » Dom Abr 19, 2009 4:57 pm

Bueno solo queria evitar calcular a cada rato el rect para copiar del sprite sheet
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor Juanxo » Dom Abr 19, 2009 7:57 pm

A lo mejor no es necesario calcular el rect ( bueno si, pero es un calculo sencillo). Guardas en un diccionario o lo que sea una tupla (x,y), que represente la imagen inicial de la animación, y una variable con el número de frame de la animacion que quieres y el calculo es una simple multiplicacion.
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Avances

Notapor kilohurts » Lun May 04, 2009 4:37 pm

Hola a todos, acá les dejo un avance de lo que estoy haciendo...enderamiz, espero que hayas usado un profiler de la implementacion de la técnica que (espero) que expliqué, si no es así nada está dicho...espero que les guste, por favor cualquier aporte es bienvenido (sobre todo respecto al framerate y alpha blending). Salu2. :lol:

http://sites.google.com/site/xzerosite/Home/ZeroX4.tar.bz2

http://sites.google.com/site/xzerosite/Home/SkyLagoon.tar.bz2
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor lacabra25 » Lun May 04, 2009 11:33 pm

Juanxo escribió:A lo mejor no es necesario calcular el rect ( bueno si, pero es un calculo sencillo). Guardas en un diccionario o lo que sea una tupla (x,y), que represente la imagen inicial de la animación, y una variable con el número de frame de la animacion que quieres y el calculo es una simple multiplicacion.


En efecto lo que Juanxo te propone es mas eficiente y si la cuestion es no tener que estar haciendo calculos continuamente (algo imposible en un programa, jeje) puedes tambien crear una estructura con tantos punteros a superficies como frames tenga la animacion y guardar en cada puntero la direccion a una superficie nueva dodne copiaras la parte correspondiente a ese frame de la animacion, un contador que aumentara o pasara al valor de inicio segun avance la animacion y a dibujar en pantalla. En cualquier caso lo que te han mencionado ya que es lo que se suele hacer, se suele hacer por ser lo mas eficiente, aunque a ti te pueda parecer pesado hacer una multiplicacion que otra para calcular la parte de la superficie que debes copiar son operaciones que no ocupan muchas lineas y que son mas sencillas que ponerse a buscar un algoritmo mas complejo con el que evitarse esas sencillas operaciones (es como en vez de calcular un numero al cuvolo calcularlo multiplicando el numero por si mismo cuatro veces y haciendole a ello una raiz cuadrada, si te ahorras el cuadrado pero estar complicando las cosas más), en la programación hay que buscar no lo mas eficiente en un lenguaje humano y que nos sea mas sencillo a nosotros, sino lo que es mas eficiente al ser procesado. Esta bien ponerle ingenio al tema, pero ello hay que enfocarlo tambien a ser ingeniosos para que el codigo se ejecute de forma mas rapida y eficiente, aunque las capacidades de los ordenadores continuamente aumentan podremos hacer mas cosas con el si lo usamos de forma eficiente.

Gracias por poner un avance del clon de megaman.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor kilohurts » Mar May 05, 2009 2:48 pm

Ok, ok, probare de las dos formas. Mi implementacion esta larga pero pensando mas me di cuenta que puedo reducir significativamente las lineas de codigo. Salu2.

PS: ¿Que les parecio el avance? Necesito su ayuda.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor lacabra25 » Mar May 05, 2009 4:10 pm

kilohurts escribió:me di cuenta que puedo reducir significativamente las lineas de codigo


No me referia solo a las lineas de codigo, sino a la eficiencia del codigo cuando se ejecuta.

El avance como avance esta bien, cuando lo tengas acabado avisa a ver como queda finalmente.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Re: Avances

Notapor endaramiz » Mar May 05, 2009 6:01 pm

kilohurts escribió:enderamiz, espero que hayas usado un profiler de la implementacion de la técnica que (espero) que expliqué, si no es así nada está dicho...
Ja-ja ¿No está nada dicho? Bueno, allá tú, eres libre de decidir ignorar mis consejos. Para que no tengan confusión los novatos que lean esto, voy a detallar un poco más las razones de por qué es más ineficiente respecto al método tradicional. Como bien había intuido kilohurts, no hace falta utilizar un profiler, solamente pensar un poco en como trabaja la biblioteca internamente. Tenemos tendencia a imaginar que una Surface es un cuadrícula de h filas por w columnas, pero, en memoria, se almacena con una gran y única "fila" de h*w(*dpp depth per píxel, profundidad de píxel). Por esta esta razón, al hacer recortes en una imagen (modificar la anchura), se complica bastante la cosa. Esto hace que la función chop sea bastante ineficiente: su algoritmo consiste en copiar píxel por píxel a una Surface nueva. El algoritmo descrito en este hilo, tal y como está construido, suele hacer 2 chops (1 solo chop lo contaré como una excepción ya que solo se da en 4 casos del total). El primero de ellos es el más critico, ya que depende del tamaño del sprite sheet. Por lo tanto, en casos excepcionales, tarda casi lo mismo que con el método tradicional y, en los casos normales, puede llegar (ya que también depende de la posición del frame) a tardar muchísimo más. Para que se entienda el "muchísimo más": en el código actual, se crea una surface temporal de 1200*180*32 que es igual a 6912000 bits mientras que en realidad solo se necesitan copiar 80*90*32 = 230400 bits (los ceros a la derecha sí importan...)

Si alguna parte no se ha entendido, no duden en preguntar.

Edit: si he tardado en responder ha sido para mirar el código fuente tanto de pygame como del megaman y luego comprobar en la práctica una implementación que realmente era, a parte de más sencilla, más eficiente.
Si aun así he errado en algo, no duden en corregir.

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Notapor kilohurts » Mar May 05, 2009 10:52 pm

lacabra25 escribió:El avance como avance esta bien, cuando lo tengas acabado avisa a ver como queda finalmente.


:shock: Por lo menos hare el primer stage jeje salu2
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor lacabra25 » Mié May 06, 2009 2:18 pm

kilohurts escribió::shock: Por lo menos hare el primer stage


¿Con "stage" te refieres a nivel, no?
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor kilohurts » Mié May 06, 2009 9:40 pm

lacabra25 escribió:¿Con "stage" te refieres a nivel, no?


Ok, afirmativo.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor kilohurts » Mié May 06, 2009 9:42 pm

Ahora lo mas dificil no es programar sino conseguir los efectos de sonido y las voces de los personajes. Si conocen alguna página avísenme por favor.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor lacabra25 » Mié May 06, 2009 11:05 pm

kilohurts escribió:Ahora lo mas dificil no es programar sino conseguir los efectos de sonido y las voces de los personajes. Si conocen alguna página avísenme por favor.

Música se que la puedes conseguir en Jamendo http://www.jamendo.com/es/ y para efectos de sonido puedes visitar http://www.freesound.org/, en cuanto a las voces de los personajes no conozco paginas con voces, podrias mirar algun sintetizador de voz (como los usados en algunos videos de humor de youtube, aunque hay alguno demasiados malos que parece que mas que hablar estuviese diciendo silabas otros son más fluidos) o grabar tu voz o la de alguien y con un editor de sonido, por ejemplo audacity, modificar la grabacion hasta que tenga el tono deseado, eco y lo que se te ocurra con las herramientas que proporciona el editor de sonido.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor kilohurts » Jue May 07, 2009 11:44 pm

lacabra25 escribió:...


Si tienes codigo que me pueda servir o mejor aun ideas no dudes en avisarme.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor lacabra25 » Dom May 10, 2009 8:54 pm

kilohurts escribió:
lacabra25 escribió:...


Si tienes codigo que me pueda servir o mejor aun ideas no dudes en avisarme.


No entiendo la cita de los puntos suspensivos, en el ultimo post no puse ningunos puntos suspensivos, sino dos direcciones donde conseguir musica y sonidos para tu juego.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor kilohurts » Lun May 11, 2009 3:50 pm

lacabra25 escribió:No entiendo la cita de los puntos suspensivos, en el ultimo post no puse ningunos puntos suspensivos, sino dos direcciones donde conseguir musica y sonidos para tu juego.


Por los puntos suspensivos me refería a:

lacabra25 escribió:Música se que la puedes conseguir en Jamendo http://www.jamendo.com/es/ y para efectos de sonido puedes visitar http://www.freesound.org/, en cuanto a las voces de los personajes no conozco paginas con voces, podrias mirar algun sintetizador de voz (como los usados en algunos videos de humor de youtube, aunque hay alguno demasiados malos que parece que mas que hablar estuviese diciendo silabas otros son más fluidos) o grabar tu voz o la de alguien y con un editor de sonido, por ejemplo audacity, modificar la grabacion hasta que tenga el tono deseado, eco y lo que se te ocurra con las herramientas que proporciona el editor de sonido.


Salu2.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm

Notapor kilohurts » Lun May 11, 2009 4:15 pm

Se pueden ver los avances en:

http://www.youtube.com/user/kilohurts

Salu2.
Avatar de Usuario
kilohurts
 
Mensajes: 12
Registrado: Vie Ene 23, 2009 10:16 pm


Volver a Ejemplos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado