Ayuda!!! Libreria graficas para juego

Iniciado por Guillermo575, 15 Marzo 2011, 06:10 AM

0 Miembros y 2 Visitantes están viendo este tema.

Guillermo575

Hola, soy muy nuevo en el foro (de hecho solo me registre para publicar en este foro)pero llevo como 2 años en la carrera de programacion y llevo bastante experiencia en la programacion en java, tanto que he hecho mi propio juego en java y esta bastante bien (aunque le faltan muchos detalles) pero interrumpi el desarrollo por que me di cuenta de algo:

Que java jala demasiados recursos y mi juego gasta mucho del procesador, de hecho en la pantalla solo pinta una imagen en pantalla y ese repintado constante es lo que lenta la maquina

Un amigo lo vio y recomendo que cambiara de lenguaje a c y si, conozco la sintaxis pero desconozco totalmente sobre las librerias que maneja y mas aun de las graficas, en mi juego manejo solamente  contenedores de imagenes(BufferedImage en java) y uno que otro metodo de hacer cuadrados.

Igual voy a buscar algunas fallas de mi codigo para mejorar el rendimiento pero me parece mas interesante trabajar en ese lenguaje ya que  es el mas demandado a la hora de hacer juegos a si que les pediria ayuda no para que me enseñen si no que me recomienden/orienten sobre que debo de hacer si quiero programarlo en ese lenguaje
Saludos

PD:Intentare subir mas tarde un video en youtube sobre como es el juego, claro no esperen algo sofisticado o validado ya que esta en version pre-pre-pre-beta y le falta mucho desarrollo pero eso se debe a por lo mismo que estoy estancado con lo del problema antes mencionado

BlackZeroX

#1
.
Usa OpenGL o DirectX. pero para mas portalidad usa OpenGL.

Temibles Lunas!¡.
.
The Dark Shadow is my passion.

Guillermo575

MMM  probare con OPenGl ¿sabes alguna pagina donde pueda investigar sobre sus metodos y funciones? (perdon por sonar tan noob)

PD: que coincidencia, mi juego usa como personaje a zero (aunque solo es temporal) aqui esta un video de la prepreprebeta del juego (espero que no se burlen de mi ya que esta aun muy verde para poderlo publicar)
[youtube=425,350]http://www.youtube.com/watch?v=ygGvjoPlG3Y[/youtube]

dato000

BURLAS?!?!?!? viejo hiciste que me avergonzara del pacman que hice y del sokoban que tenia trabajando hace tiempo. Y se puede hacer eso en c++??? de momento solo se que en juegos, se han hecho los emuladores de SNES (SNES9x, ZNES) y uno de Nintendo 64, y varios juegos hentai con C++!!

como se hace?? ojala sacaran programas así en la tele!! viejo, muy buen beta. Si me enseñaras seria genial, grandioso, a falta de mejor palabras.

Pero el Sprite de ese Zero, nahhh yo usaria el de X4 o el de X3. jaja son solo gustos.

De verdad se puede hacer eso C++?? alguien sabe?? no creo que sea como un metodo burbuja o hacer una pila o cola

y pensar que yo me enorgullecia de mi PacMan (un asco por cierto)

Puedes dejar el dato?? o no es open source??



KevinSec

Podrías utilizar SDL (multiplataforma) una librería muy sencilla de utilizar.

1 ejemplo de SDL y C++

[youtube=425,350]http://www.youtube.com/watch?v=piNtHWCfLas[/youtube]

Guillermo575

#5
Hola, gracias por lo que mostraron interes e investigue un poco (ya que estuve todo el dia en la escuela y como el internet de ahi era lentisimo y los que no,tenian bloqueado  esta pagina uff,pero mejor regreso al tema) asi que me gustaria hacer una pregunta muy noob ¿que ide me recomiendan para programar ?
Ademas estuve viendo y aunque opengl suena interesante ya que maneja los graficos como busco, pero recuerdo que mi juego no solo se trata de graficos, sino que tambien se maneja eventos de teclado,reproducir efectos de sonido(en el video no se oyen pero si tienen algunos) y vi que el SDL contiene librerias  que me permite hacer lo antes mencionado asi que me gustaria saber que ide me recomiendan y como instalar el sdl en el ide (con un link me basta).

Vi el link que me paso KevinSec y se ve bastante  bien el juego y el potencial que tiene el SDL

Cita de: dato000 en 15 Marzo 2011, 12:48 PMSi me enseñaras seria genial, grandioso, a falta de mejor palabras.

Pero el Sprite de ese Zero, nahhh yo usaria el de X4 o el de X3. jaja son solo gustos.

Puedes dejar el dato?? o no es open source??
Bueno, la verdad solo tengo experiencia grafica en java aunque te puedo dar algunos consejos pero basicamente lo que utilizo( y es lo que necesito a la hora de programar en c o c++) es:

1.-Leer archivos tanto ficheros de texto como imagenes (ya sea mapa de bits o png)
2.- guardar esas imagenes  en contenedores o matricez para poder detectar los datos de cada uno de los pixeles(color,transparencia,pero sobre todo el color que compone cada pixel)  e incluso manejando esas matrices te permitiria partir esa imagen en varias o desde un punto y asi crear animaciones,de hecho zero esta compuesto por varias imagenes de acuerdo a la acion que este realizando (ya sea correr,disparar,etc) y solo dibujo una parte de esa imagen y  voy recorriendo las cooredenadas para parecer que se esta moviendo.
En java existe una clase que hace eso y se llama BufferedImage
3.-Manejar eventos de teclado de hecho como su metodo de keypressed() no responde como el de un control de videojuego tuve que hacer varios trucos y validaciones para que el personaje se moviera lo mas natural posible
4.-Maneja hilos (o Threads como quieran decirle) ya que los Threads controla el personaje, la calavera de fondo, los disparos, animaciones de manera independientes
5.- reproduce archivos de sonido(.wav y midi aunque me gustaria que fuera tambien mp3)
6.- Y por ultimo pero uno de los pilares en el proyecto:las viejas  listas enlazadas(si mas no recuerdo creo que use listas enlazadas dobles,y si no sabes cuales son te recomiendo que busques en google ya que te seran bastante utiles) estas funcionan como el java.vector pero la diferencia es que los vectores guardan los datos a nivel de objeto pero las listas instancian un objeto de una especifica clase y asi puedes acceder a sus metodos,variables y atributos de esa determinada clase sin problemas
¿para que sirven? por que cada vez que se crea un nuevo enemigo los agrego a esa lista y si lanzo un disparo y choca con un enemigo revisa cual enemigo fue de acuerdo a sus coordenadas y listo, tambien lo uso para guardar y usar las diferentes imagenes de zero en el juego sin necesidad de cargar sus archivos a cada rato
De hecho no se necesita ninguna libreria ni paqueteria especial para hacer esas listas pero la desventaja es que son que son muy largas y complicadas  por lo que son recomendables usarlas cuando manejas muchos  datos   dinamicos (por ejemplo pueden haber 1 enemigo en pantalla y despues se aparecen 20 o 10 en pantalla y como los vas matando se van reduciendo y asi sucesivamente...)

Sobre el codigo de fuente lo publicare en cuanto soluciones algunas cosas:
Algunos bugs graficos, programar un enemigo mas decente y mejorar algunas mecanicas de zero, ah y comentar y ordenar el codigo (que esta echo un desastre pero ese es el menor de mis problemas)
Y en cuanto a zero, bueno de hecho solo lo utilizo temporalmente ya que me gustaria conocer a alguien que le guste el diseño grafico y que se interese en el proyecto para ponerle sprites y recursos mas originales( por eso me interesa resolver esos problemas primero antes de publicar la beta) Aunque tambien me hubiera gustado utilizar a shanoa de castlevania:order of eclessia jeje
pero bueno eso es hasta donde puedo hablar acerca del juego.

Saludos y gracias por tu atencion

KevinSec

Todo eso lo puedes hacer con SDL como te comenté . Aquí te dejo 1 link a una de las páginas de referencia de desarrollo de videojuegos usando la librería SDL, a parte de tutoriales hay muchos ejemplos.

Citarhttp://www.loosersjuegos.com.ar/referencia/articulos/instalar_devcpp

En ese enlace te enseña a usar SDL en el IDE Dev-c++.

CitarSDL (Simple DirectMedia Layer) es una API gráfica para realizar operaciones de dibujado en 2D, gestionar efectos de sonido y música, y cargar imágenes.

Existen varias librerías que complementan SDL, algunas de ellas son:

    *
      SDL_image: Carga de imágenes en diferentes formatos: png, jpg, etc.
    *
      SDL_mixer: Carga de formatos de sonido como wav, mp3, ogg, etc.
    *
      SDL_net: Comunicación de datos en redes.
    *
      SDL_ttf: Uso de fuentes TrueType.
    *
      SDL_gfx: Dibujo de primitivas gráficas, escalar/rotar imágenes, control de framerate, Filtros de imagen MMX.

SDL permite básicamente crear aplicaciones en 2D, pero si queremos extender estas capacidades podemos usarla en conjunto con OpenGL, ya sea para crear nuevamente aplicaciones 2D que aprovechen las características de aceleración por hardware, que todas las tarjetas de video poseen hoy en día, como para crear aplicaciones completamente en 3D.

Ya vimos las herramientas y conocimientos necesarios para comenzar en el desarrollo de videojuegos, pero no podemos dejar de mencionar que también existen los Engines o Motores de juego, que están basados en algunas de las API's ya vistas, OpenGL o DirectX principalmente, que proveen al programador todas las funcionalidades necesarias para el desarrollo de un juego.

Básicamente un Engine esta formado por varios sistemas y subsistemas, por ejemplo un sistema gráfico para manejar objetos 2D o 3D, un sistema de control de entrada (teclado, mouse, etc.), sistema de texto, sistema de red, sistema de scripts, sistema de audio, etc. Todos los conocimientos necesarios que vimos antes ahora están aplicados en un Engine. API's Gráficas

Existen Engines gratuitos (algunos bastante buenos y complejos) y otros comerciales, por ejemplo podemos nombrar los siguientes: Irrlicht, Ogre 3D, Crystal Space 3D, PopCap, Torque, etc.

Para comenzar a desarrollar conviene utilizar algo más sencillo (pero no por eso menos potente). Por ejemplo podríamos usar la dupla SDL/OpenGL junto a otras librerías externas para construir nuestro propio Engine.

No solo es necesario disponer de las herramientas y conocimientos que ya vimos para el desarrollo de juegos, aun hay más, pero esto ya no es tarea del programador (aunque conviene también tener estos conocimientos en forma general por lo menos) estamos hablando del Diseño Gráfico de un juego. Alguien debe ser capaz de realizar las imágenes que aparecerán, ya sea en menús, pantallas de configuración y en el juego mismo.

Los típicos conocimientos que debe tener un diseñador grafico, son el uso de alguna herramienta de retoque fotográfico como Photoshop, Paint Shop Pro o Gimp, y herramientas para modelar objetos 3D tales como 3D Studio Max, Maya, Blender, entre otros.

Y no puede quedar afuera tampoco, algun personaje que componga la música o cree y/o edite los sonidos que aparecerán en el juego. Ejemplo de este tipo de software es Adobe Audition, Acid Pro, Reason, Fruity Loops, etc.

Guillermo575

#7
Cita de: KevinSec en 16 Marzo 2011, 08:46 AM
Todo eso lo puedes hacer con SDL como te comenté . Aquí te dejo 1 link a una de las páginas de referencia de desarrollo de videojuegos usando la librería SDL, a parte de tutoriales hay muchos ejemplos.

En ese enlace te enseña a usar SDL en el IDE Dev-c++.

Acabo de revisar la pagina e instale el ide como decia y el codigo de ejemplo me funciono sin problemas, ahora solo me falta leer los demas ejemplos y  metodos, y si tengo un problema espero que me puedas contestar
Saludos

PD: termine de leer el enlace y decia que para que otros lo pudieran jugar tendrian que hacer todo ese rollo de importar paqueterias en el \system de windows¿hayq alguna manera de que sea portable el juego unicamente poniendo los .dll en la carpeta del juego? ¿o si se referia a que se podia  hacer en la sección de notas que dice Versiones Binarias (.exe):?.

anonimo12121

Yo se usar SDL, solo tienes que llevar las DLLs que uses en el ejecutable.
http://softwarelibre.uca.es/wikijuegos/
Este es el mejor tutorial de SDL que conozco.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

Guillermo575

#9
Tengo un problema ¿como puedo reproducir mp3? segun dice que puedo pero no se oye nada (de hecho me tira error cuando intenta leerlo), asi fue como le puse:

cancion = Mix_LoadMUS("music.mp3");
donde "music.mp3" esta en la carpeta del proyecto y ya lo intente poniendolo en otras carpetas y usando diferentes archivos
el codigo lo saque de aqui:
http://www.loosersjuegos.com.ar/referencia/articulos/instalar_devcpp