Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: xRodak en 10 Enero 2014, 02:43 am



Título: Aprender a programar animaciones 2D
Publicado por: xRodak en 10 Enero 2014, 02:43 am
Bueno, primero les comento lo que busco.

Quiero crear un juego aventura/rpg en 2D. Para ello, he aprendido C++ a fondo, anteriormente ya conocía python, por lo que tengo mucho conocimiento sobre programación y sobre como llevar a cabo un buen código (o al menos eso creo).

El juego que quiero crear quiero que sea similar al Ragnarok Battle Offline en lo que es gráfica: aIoAwqUJqJs

Pero, donde puedo aprender a programar la animación?, los movimientos de personajes, efectos, todo lo que tiene que ver con gráfica en 2D?
Tengo conocimiento de estructura de datos, string, I/O, vectores, etc, etc, todo lo que corresponde a programación en si en c++. Quiero aprender programación gráfica (quiero empezar con SFML). Pero tengo entendido que esta libreria solo me da herramientas para llevar a cabo la parte gráfica de mi juego, pero por ejemplo, cómo puedo aprender la forma correcta de ejercer una animación eficiente en mi juego (con animación me refiero, a que mi personaje tenga una imagen distinta para atacar, caminar, saltar, recibir daño, etc). Claro, es parte de lo que yo mismo debo aprender a programar como programador, de hecho, actualmente tengo muchas ideas en mi cabeza de como hacerlo, pero me gustaría algun documento que me enseñe la forma correcta, para partir bien desde el comienzo y poder ir complementándolo luego, evitando un mal código.

Muchas gracias de antemano.


Título: Re: Aprender a programar animaciones 2D
Publicado por: engel lex en 10 Enero 2014, 02:51 am
hay un prototipo de motor de juego llamado Angel Engine, es funcional, pero está desarrollado principalmente para que veas como está hecho y que hace, incluso sacrifica potencia y funcionalidad en pro de legibilidad... te recomiendo probarlo, darle unas vueltas etc... eso si, si estás en windows, necesitarás visual studio por cosas practicas...

está medianamente documentado, tiene ejemplos bien claros, es muy modular, es multiplataforma, etc...

aqui el link
http://angel2d.com/ (http://angel2d.com/)


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 03:51 am
Que yo sepa sfml puedes crear un juego completo.
No la conozco bien pero creo que es como sdl y esta orientada a objetos.
Yo ando aprendiendo SDL que esta en su versión 2.0.
Es una librería que te permite no solo manejar el gráfico sino también entrada y salida( teclado, joystick, ratón...), aparte también maneja sonido y algo de red también.
Es bastante completa, puedes hasta hacerlo en 3d si sabes como hacerlo. XD
Creo que SFML hace lo mismo, yo no puedo comparar por que solo conozco SDL y me parece muy muy potente, creo que el limite es mi capacidad. XD
Prueba las las 2, prueba cargar imágenes con ambas o lo que sea.
 Esta pagina hace un repaso por lo que es la programación 2d sin referirse a ninguna librería en concreto, la librería es cuestión de gusto y necesidad.
Unas te hacen mas cómodo otras son mas difíciles pero mas potentes no vas a saber cual es la mejor para ti si no las pruebas ambas.
Cargar imágenes con una y con otra es fácil, crear ventanas, cargar letras.
La animación es similar a un gif animado, tienes varias imágenes que van cambiando en un determinado tiempo.
Te pongo referencias:
http://razonartificial.com/tag/teoria/ (http://razonartificial.com/tag/teoria/)
http://razonartificial.com/2012/02/guia-aprender-programar-videojuegos-con-cpp/ (http://razonartificial.com/2012/02/guia-aprender-programar-videojuegos-con-cpp/)
Para entender lo que es:
http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-i/ (http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-i/)
http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-ii/ (http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-ii/)
http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-iii/ (http://razonartificial.com/2010/08/introduccion-a-la-programacion-grafica-2d-iii/)

Con lo de arriba eres perfectamente capaz de comprender el concepto de creacion de un juego en 3d.

No se mucho sobre programación en SFML pero te dejo vídeos sobre SDL.
No creo que sea muy difícil encontrar sobre SFML tampoco

https://www.youtube.com/playlist?list=PLTd5ehIj0goPWUzoZ7hi8v61SEpkA6AsM (https://www.youtube.com/playlist?list=PLTd5ehIj0goPWUzoZ7hi8v61SEpkA6AsM)
Esta pagina es una muy buena referencia, aun esta imcompleta sobre la SDL 2.0, pero el dueño va subiendo a pasos alijerados y ya tiene lo basico para manejar imagenes y texto.
http://lazyfoo.net/tutorials/SDL/index.php (http://lazyfoo.net/tutorials/SDL/index.php)

Te dejo un ejemplo de un juego echo en sdl y opengl:
http://www.secretmaryo.org/ (http://www.secretmaryo.org/)

ni que decir de detrás de SDL viene financiando su desarrollo la plataforma Steam y una de sus intenciones es hacer una librería altamente portable y que pretende dar mayor soporte a los juegos en linux.
Steam va lanzar o ya lo ha echo su consola que va competir con la play y xbox.
Creo que uno de los motivos es este.
Hay muchos mas juegos echos en sdl, esta el freeciv
Esta también este: http://store.steampowered.com/app/233450/ (http://store.steampowered.com/app/233450/), prision architect

Bueno mucha lectura.
Como dije antes, si ya sabes programar algo pues bájate ambas librerías y prueba lo básico, carga una imagen, escribe algo en pantalla, crea ventanas, intenta hacer una animación básica....
En la pagina de Lazyfoo esta varios ejemplos de código es solo descargar y compilar.
Suerte ;)



Título: Re: Aprender a programar animaciones 2D
Publicado por: xRodak en 10 Enero 2014, 05:19 am
Muchas gracias por ambas respuestas.

No entendí muy bien qué es Angel2D, pero le daré una mirada para ver lo que puede hacer.

vangodp, gracias por toda esa info, de verdad me ayuda bastante. En el mientras tanto me puse a averiguar sobre animación, y ya se me ocurrió una muy buena idea, crear mis propios datos de sprites y utilizarlos en mi código. Creó que dejaré de enfocarme en eso (creo que ya es un problema resuelto). Ahora, es solo cosa de programar.

He leído bastante sobre SDL y SFML, estoy algo confundido, ya que aún no sé lo que es el openGL ni para que sirve, solo sé que de puede usar en combinación con los otros. Pero como tu dijiste, sería buena idea probar ambos, comenzaré utilizando SDL, y luego lo compararé con SFML haciendo lo mismo en ambas librerias, luego se eso averiguaré más a fondo sobre opengl y las otras librerias (glu y glut) para ver que es lo que más me conviene para lo que quiero.

Muchas gracias. Saludos !


Título: Re: Aprender a programar animaciones 2D
Publicado por: engel lex en 10 Enero 2014, 05:27 am
angel 2d es un motor de juego básicamente...

es decir, tiene todas las funciones necesarias para el manejo de audio, imágenes, inteligencia artificial, comunicación sobre la red, menús etc...

incluso puedes hacer un juego básico en el en unas pocas horas de trabajo...

el punto de ese es que
1- está en c++
2- está orientado a objetos
3- tiene ejemplos
4- está hecho modularmente
5- está hecho para aprender, es decir, tiene más prioridad la legibilidad que el funcionamiento
6- está hecho para correr en linux, windows, mac, android, ipad

en el te puedes fijar como funciona, cómo divide las funciones de "update" (el tiempo donde se hacen las acciones) y "render" (donde se renderiza la imagen), cómo usa el motor de física, cómo maneja el mundo y la cámara... en general como están estructuradas todas las cosas básicas para las que estarían ideados los motores de juego


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 05:49 am
Open gl no te puedo dar una respuesta tan técnica, pero te lo explico con mis palabras lo poco que se XD
Es lo mismo que directX pero libre, o sea que sirve para crear juegos 3d, o también se puede dar la impresión de ser un 2d aun que realmente sea un 3d al que ves solo por un lado.
Imaginas que tienes un cubo tridimensional, pero si solo le miras desde un lado pues solo le ves una cara.
(http://gamerlimit.com/wp-content/uploads/2009/03/wii-super-paper-mario-views-500x196.jpg)
Eso es lo que se encarga OpenGL, de las 3d.
¿Por que OpenGL y no directX?Por que DirectX es una librería exclusiva de windows a la que no vas a ver en otras plataformas como linux o diria que en ninguna otra.
Sin embargo OpenGL esta en una infinidad de dispositivos como móviles, windows, tabletas, Linux....
Realmente vas a cubrir una área mas amplia con OpenGL que con DirectX.
Su nombre traducido es algo como: librería de gráficos libre.
No te va hacer falta para un juego 2d, pero solo que sepas que hay esa posibilidad, y eso es lo que esta el juego: http://www.secretmaryo.org/ (http://www.secretmaryo.org/)

PD:Aqui un video simples para que veas que se puede usar 3d con opengl en sdl
http://www.youtube.com/watch?v=a3MACw5hB2Q (http://www.youtube.com/watch?v=a3MACw5hB2Q)
Otro juego en sdl copia de mario XD:
http://www.youtube.com/watch?v=BJXm_T_5g7c (http://www.youtube.com/watch?v=BJXm_T_5g7c)
También hay la librería Allegro que tienes muy buenos vídeos en este canal:
http://www.youtube.com/user/deividcoptero/videos?view=1&flow=list (http://www.youtube.com/user/deividcoptero/videos?view=1&flow=list)
Es bueno ver esos vídeos aun que no te interese la librería por que a la hora de resolver colisiones y otros problemas pues puedes aprender algo de esos videos.
Para un juego 2d quizá te interese mirar esto también:
http://en.wikipedia.org/wiki/Parallax_scrolling (http://en.wikipedia.org/wiki/Parallax_scrolling)
Mire el fondo el efecto que tiene sobre las montañas:
(http://abetteruserexperience.com/wp-content/uploads/2012/12/parallax-scrolling-mario.gif)


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 06:18 am
Para hacer lo básico que es cargar imágenes y esas cosas eso lo puedes hacer con todas las librerías, ademas averigua no solo sobre gráficos, sino sobre rotación de imágenes, sonido, entrada y salida(ratón, teclado, mando, red...), transparencia(ALPHA), colores (formato de pixeles).....
Son muchas las cosas que abarcan la programación.
SDL cumple con todo eso, algunas cosas mas fáciles otras mas difíciles.
Lo que se es que SDL no es una librería exclusiva de videojuegos, es mas bien multmedia, por que gestiona todas estas cosas.
SFML y Allegro esta mas pensada al videojuego.
Hay una librería también llamada Ogre 3d y pinta muy bien.
Pero lo mas importante no es estar mirando cual es la mejor, claro tienes que saber mas o menos para que sirven, lo mas importante Haz código  ;D

Cuando Aprendas todo lo anterior a lo mejor te te puede servir eso:
http://forum.unity3d.com/threads/106027-Thinkscroller-Pixel-perfect-parallax-scrolling (http://forum.unity3d.com/threads/106027-Thinkscroller-Pixel-perfect-parallax-scrolling)


Título: Re: Aprender a programar animaciones 2D
Publicado por: xRodak en 10 Enero 2014, 16:46 pm
Muchas gracias nuevamente por la info.

Me interesaba mucho lo del movimiento del mapa, lo veré más a fondo una vez entienda el uso de las librerias. Por ahora utilizaré SDL y SFML, tambien quiero echarle una mirada a Angel2D, para hacer una comparación con las otras librerias viendo lo que puedo lograr con cada una.

Por ahora no me interesa mucho ogre ni allegro, quiero partir con poco, usar utilizar allegro me quitaría un poco de tiempo, supongo que con las otras me bastará.

Tengo una pequeña gran duda. Como instalo SDL + SDL_image en Code Blokcs? Sería buena idea utilizar code blokcs? Tambien tengo eclipse y dev c++

Saludos.


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 19:44 pm
http://www.youtube.com/watch?v=rnuyUC02w90&list=SPTd5ehIj0goPWUzoZ7hi8v61SEpkA6AsM&index=2 (http://www.youtube.com/watch?v=rnuyUC02w90&list=SPTd5ehIj0goPWUzoZ7hi8v61SEpkA6AsM&index=2)

esta es la versión 2.0.0 en la pagina me parece que esta la ultima que es la 2.0.1 o lo que sea, se instalan de la misma forma.

Aquí en fotos:
http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php (http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php)

La libreria la descarga de aqui:
http://libsdl.org/download-2.0.php (http://libsdl.org/download-2.0.php)

Depende de algunos factores.
Si tu ordenador es 32 o 64 bits o lo que sea XD
y también del sistema operativo.
Aparte de eso, debes de tener junto a donde vaya el ejecutable una copia de la sdl2.dll creo que se llama así, eso se puede apalear copiando la dll a tu carpeta de system32 que es la de windows xp que tengo.
c:\windows\system32
Ahí le pegas el archivo y con eso evitas tener que estar pegando la dll por todos los lados, o bien puedes incluir una copia de la dll dentro del archivo exe.
Si vas a otro ordenador lo mejor es o tener la dll junto o incrustarla como dije antes, aun que eso no se hacerlo.
Puedes guardar una copia del proyecto como plantilla si te funciona y así evitar hacer esto una y otra vez.

La librería ttf se hace de la misma forma.Le indicas al compilador la carpeta lib y include, luego en opciones pones de linker los comandos
-lmingw32
-lSDL2main
-lSDL2
-lSDL2_image
-lSDL2_ttf
-lSDL2_mixer

Explicado:
-lmingw32        <-parámetros para mingw (compilador)
-lSDL2main      <-parámetros de linkado de la librería principal de sdl
-lSDL2             <-lo mismo de arriba
-lSDL2_image  <-parámetros de linkado para la librería de soporte para otros formatos de imagen(jpg, tga, png...) http://www.libsdl.org/projects/SDL_image/ (http://www.libsdl.org/projects/SDL_image/)
-lSDL2_ttf        <-parámetros para la librería que nos permite usar fuentes ttf http://www.libsdl.org/projects/SDL_ttf/ (http://www.libsdl.org/projects/SDL_ttf/)
-lSDL2_mixer   <-parámetros para la librería que nos permite usar sonidos http://www.libsdl.org/projects/SDL_mixer/ (http://www.libsdl.org/projects/SDL_mixer/)

Esos no son todos, hay algunos mas y todos están aquí:
http://www.libsdl.org/projects/ (http://www.libsdl.org/projects/)
Esta el soporte para red y otros mas.
También hay ejemplos aun que la mayoría son para sdl antiguos y ya no te sirven, lo que cambia la manera antigua es que ahora existe una opción de render, antes se trabajaba con blit.
Aun que no sean sdl 2.0 la mayoría de cosas si te vale para referencia.
Una muy buena pagina con ejemplos sobre la librería 1.2 antigua es:
http://lazyfoo.net/SDL_tutorials/ (http://lazyfoo.net/SDL_tutorials/)
http://www.losersjuegos.com.ar/referencia (http://www.losersjuegos.com.ar/referencia)

Otras paginas buenas aun que algunas sean material antiguo:
http://www.sdltutorials.com/ (http://www.sdltutorials.com/)
http://www.muylinux.com/2010/08/16/programacion-de-videojuegos-con-sdl-parte-i-introduccion (http://www.muylinux.com/2010/08/16/programacion-de-videojuegos-con-sdl-parte-i-introduccion)
http://razonartificial.com/?s=SDL (http://razonartificial.com/?s=SDL)
¿Por que te paso paginas que no funcionan?Simples, dado al poco material que existe por ser muy reciente aun la teoria la puedes sacar de estas paginas.
El canal de makigas en youtube es lo mejor que encontré actualmente en español.
Pero por supuesto la mejor ayuda que vas a tener es la pagina oficial.
Aquí las diferencias entre sdl y sdl2:http://wiki.libsdl.org/MigrationGuide (http://wiki.libsdl.org/MigrationGuide)
La mejor ayuda es esta aun que carezca de ejemplos, esta toda la documentación de funciones, estructuras y demás cosas:
http://wiki.libsdl.org/CategoryAPI#SDL_2.0_API_by_Name (http://wiki.libsdl.org/CategoryAPI#SDL_2.0_API_by_Name)
Puedes pinchar para ver las funciones o por tipo imagen, sonido...
Si tienes problemas para instalar te echo un cable ;)


Título: Re: Aprender a programar animaciones 2D
Publicado por: amchacon en 10 Enero 2014, 19:51 pm
Citar
Pero tengo entendido que esta libreria solo me da herramientas para llevar a cabo la parte gráfica de mi juego, pero por ejemplo, cómo puedo aprender la forma correcta de ejercer una animación eficiente en mi juego (con animación me refiero, a que mi personaje tenga una imagen distinta para atacar, caminar, saltar, recibir daño, etc). Claro, es parte de lo que yo mismo debo aprender a programar como programador, de hecho, actualmente tengo muchas ideas en mi cabeza de como hacerlo, pero me gustaría algun documento que me enseñe la forma correcta, para partir bien desde el comienzo y poder ir complementándolo luego, evitando un mal código.
Aprendetelo por tu cuenta, es mi consejo xD.

Eso si, es muy importante que aprendas a usar hilos. Para las animaciones son casi obligatorios.


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 20:26 pm
¡Hola amchacom! Tienes alguna pagina buena y facil para dumys como yo jaja sobre eso que comentas "hilos"?


Título: Re: Aprender a programar animaciones 2D
Publicado por: amchacon en 10 Enero 2014, 20:40 pm
¡Hola amchacom! Tienes alguna pagina buena y facil para dumys como yo jaja sobre eso que comentas "hilos"?
Pues no he tenido ninguna favorita, todo lo que he aprendido ha sido racaneando de varios lugares.

Muchas páginas harán tutoriales con las pthread, pero yo os recomiendo que empezeís con las clases que nos da el nuevo C++11:
http://en.cppreference.com/w/cpp/thread


Título: Re: Aprender a programar animaciones 2D
Publicado por: vangodp en 10 Enero 2014, 21:03 pm
ok ¡muchas gracias! ^^


Título: Re: Aprender a programar animaciones 2D
Publicado por: xRodak en 11 Enero 2014, 16:04 pm
Ya pude instalar SDL ! Gracias nuevamente.

Aprendetelo por tu cuenta, es mi consejo xD.

Eso si, es muy importante que aprendas a usar hilos. Para las animaciones son casi obligatorios.

Sobre esto, si, es bueno aprender por las mias, pero eso es muy dificil, ya que siempre hay estructuras que funcionan mal con datos pesados, que crean muchas copias de los recursos, o no permiten acceder rápidamente a ellos, por lo que tener un código que maximice el fluido del juego y minimice la memoría es casi imposible para un principiante como yo, creo que intentar hacerlo sería una perdida de tiempo (claro, puliría ciertas cosas, pero eso se hará si o si en el desarrollo general del juego). Afortunadamente ya encontré una guia que me señala las estructuras de datos correctas a utilizar, y la forma de guardar los recursos para poder utilizarlos lo más eficientemente posible.

PD: También debo aprender threads, pero estoy leyendo un libro, y aun me queda mucho que aprender antes de llegar a hilos.

Doy el o los problemas como resueltos, gracias por la ayuda !