elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Littlehorse, Eleкtro)
| | |-+  Programacion de juegos 2D
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programacion de juegos 2D  (Leído 7,310 veces)
soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Programacion de juegos 2D
« en: 19 Enero 2009, 11:39 »

Hola

Aunque tengo conocimientos de programación siempre he hecho cosas de gestión (acceso a bases de datos y tal), pero se me ha metido en la cabeza hacer un juego.

Lo que pasa es que aunque veo como resolver varios problemas hay uno cuya solución no veo. Os lo explico.

Pongamos para entendernos un juego tipo ajedrez. El problema que tengo es el de el tapiz de fondo sobre el que se mueven las piezas. No veo como mantener dos capas, una la del terreno de juego y otra la de las piezas que se mueven.

El caso en el que pienso es mas complejo que un tablero de ajedrez. Estoy pensando en un juego tipo civilization 2 de Sid Meier que era en dos dimensiones. Al iniciar la partida se crea un mundo (con rios, recursos, costas y mares) y luego las piezas se desplazan a traves de ese mundo.

Además un juego de ajedrez se ve desde arriba en perspectiva normal, pero yo quiero en perspectiva isométrica cosa que aún lo complica mas.

¿Podeis darme alguna idea de como se plantea eso?¿Algún enlace donde lo expliquen?

Un saludo


En línea

Callar es asentir ¡No te dejes llevar!
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.982


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #1 en: 19 Enero 2009, 14:46 »

Hola

Lo primero, lenguaje?? Por que en algunos lenguajes (véase C# + XNA) la función para pintar te permite elegir directamente la capa, pero bueno, ciñámonos al caso general..

Imagina que tienes dos clases, una llamada "fondo" y otra llamada "protagonista" cada una con dos métodos "dibujar", encargados de dibujar la textura correspondiente.

Oks, en el bucle principal del juego tienes que llamar a estos métodos, si llamas primero a fondo.dibujar se pintará el fondo, y si a continuación llamas a protagonista.dibujar se dibujará el protagonista sobre el fondo.

En resumen...
Lo que dibujas antes queda al fondo y lo que dibujas después se le superpone.

Si especificas el lenguaje, framework usado y de más pues a lo mejor te puedo dar unas explicaciones más concisas.

Por si te son de ayuda dos ejemplos en java muy simples y didácticos (creo yo :P)
http://e0n-productions.blogspot.com/2008/11/space-invader-en-java.html
http://e0n-productions.blogspot.com/2008/11/pong-en-java.html

En cuanto a la isométrica supongo que usarás titles, la técnica es pintar por filas horizontalmente. Como es muy largo de explicar aquí te dejo un buen tuto:
http://www.wired-weasel.com/users/serhid/blog/?page_id=4

Es para usar SDL, pero bueno, el concepto general se coge ;)
1S4ludo, E0N


En línea

Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #2 en: 19 Enero 2009, 19:23 »

Hola

Lo primero, lenguaje?? Por que en algunos lenguajes (véase C# + XNA) la función para pintar te permite elegir directamente la capa, pero bueno, ciñámonos al caso general..

Imagina que tienes dos clases, una llamada "fondo" y otra llamada "protagonista" cada una con dos métodos "dibujar", encargados de dibujar la textura correspondiente.

Oks, en el bucle principal del juego tienes que llamar a estos métodos, si llamas primero a fondo.dibujar se pintará el fondo, y si a continuación llamas a protagonista.dibujar se dibujará el protagonista sobre el fondo.

En resumen...
Lo que dibujas antes queda al fondo y lo que dibujas después se le superpone.

Si especificas el lenguaje, framework usado y de más pues a lo mejor te puedo dar unas explicaciones más concisas.

Por si te son de ayuda dos ejemplos en java muy simples y didácticos (creo yo :P)
http://e0n-productions.blogspot.com/2008/11/space-invader-en-java.html
http://e0n-productions.blogspot.com/2008/11/pong-en-java.html

En cuanto a la isométrica supongo que usarás titles, la técnica es pintar por filas horizontalmente. Como es muy largo de explicar aquí te dejo un buen tuto:
http://www.wired-weasel.com/users/serhid/blog/?page_id=4

Es para usar SDL, pero bueno, el concepto general se coge ;)
1S4ludo, E0N

Gracias EON, pues la verdad yo tengo un juego no concluso en java usando swing, es decir me falta un chorro por hacer y ando muy ocupado, pero he pensado pasar lo que llevo hasta el momento usando Java2D, y creo que es interesante lo que muestras en tus ejemplos, estan muy buenos  ;D

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
ignorantev1.1


Desconectado Desconectado

Mensajes: 579


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #3 en: 20 Enero 2009, 04:41 »

Jaja...
me paso lo mismo, yo preguntaba en los foros(otros) eso,  y me respondian que si "que lenguaje", y yo decia VB6, se reian y se reian, pero no importa el lenguaje, solo tienes que saber las "TEORIAS BASICAS DE LA REALIZACION DE VIDEOJUEGOS":

1 - Sprites:  Los esprites son clases que representan "Heroes, enemigos, coches con los que chocas, piedras que te golpean, piezas que mueves, etc"... todo lo que pueda tener un fin en un videojuego:

Podriamos definir un sprite con las siguientes propiedades:

Estado ->indica si el Sprite esta activo
X -> La poscion X en el mapa del sprite
Y ->    ''      ''    Y  ''   ''   ''      ''    ''
Animacion->un sprite puede tener animacion interna
...etc: y muchas mas... e incluso con metodos...

2- Mapping: Imaginate una matriz[][], de X y Y tamaño, y con un valor entero,
y en la lectura de la matriz dibujamos un trozo  de mapa correspondiente al numero contenido.

por ejemplo:
mapa[1][2]=3

en la poscicion 1,2 se dibujara un "pasto" por que el 3 representaria el pasto...etc...
El mapping es trazar el fondo del juego, en este cazo del tablero

esto es lo mas basico: pero casi es todo
si quieres  especifica un lenguaje y vere se te puedo ayudar
En línea

soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: Programacion de juegos 2D
« Respuesta #4 en: 20 Enero 2009, 17:44 »

El lenguajo no importa.

Me quedo con la idea de los sprites. Creo que por ahí voy bien.

Sobre un mapa ya existente se mueven los distintos sprites. Uno es el sprite "ciudad" que tiene una serie de características. Otro es el sprite "soldado" que tiene otras características. También tengo el sprite "colono".

Si en un determinado lugar del mapa creo una ciudad en las coordenadas [X,Y] queda un sprite de tipo ciudad con nombre "xxx".

El soldado se mueve por el mapa. Cada movimiento debe ser verificado para comprobar que la casilla a la que quiere ir es una casilla válida (p. ej no puede ir al mar).

Pero el gran problema lo veo en el mapa. Al iniciar la partida se crea un mundo. Para ello tengo una colección de gifs de montañas, rios, costas, mar, recursos, etc. Yo tengo que poner un valor a cada casilla de ese mapa. Ese valor determina el gif que le corresponde, la velocidad de desplazamiento, la cantidad de comida que genera, dinero, ..., etc)

Osea yo veo tres tablas. Una la que define el mapa, otra por la que andan las unidades y otra la que se ve con terreno y unidades. Estas tienen un icono con una figura y borde transparente por tanto al ponerse en una determinada ubicación se ve el gif del terreno y encima el gif de la unidad.

Cada vez que muevo una unidad se comprueba la coordenada destino en la tabla del mapa para saber si el movimiento es posible. Si el movimiento es posible se realizan los cálculos correspondientes al movimiento, se superpone el gif de la imagen sobre el gif del terreno y se quita el gif de la unidad de la posición anterior.

La cuestión
Al crear el mapa en una tabla yo asigno un valor a cada elemento. Cada valor se corresponde con un tipo de terreno y en la tabla "mapa visible" se queda cada icono de cada tipo de terreno en cada casilla. Así se ve el mapa.
 ¿Como hacer que se visualice en prespectiva isométrica?


Dicho de otro modo para que sea mas comprensible: si yo creo un tablero de ajedrez como hacer para que este se vea en perspectiva isométrica y no cual cuadrícula aburrida y sin imaginación ...
En línea

Callar es asentir ¡No te dejes llevar!
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.982


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #5 en: 20 Enero 2009, 18:20 »

El lenguaje realmente si importa un poco por que cuando tienes muchos titles se puede hacer muy pesado organizarlos con números, si usas C++ por ejemplo puedes guardar las clases en un archivo binario y cargarlas, C o VB6 no :P pero bueno...

Has leído el link que he puesto??
Citar
En cuanto a la isométrica supongo que usarás titles, la técnica es pintar por filas horizontalmente. Como es muy largo de explicar aquí te dejo un buen tuto:
http://www.wired-weasel.com/users/serhid/blog/?page_id=4

Puedes pintar directamente los titles con forma de rombos o pintarlos cuadrados y girarlos en el código para renderizarlos en forma de cuadrado (cosa que no te recomiendo...)
En línea

karmany
Colaborador
***
Desconectado Desconectado

Mensajes: 1.493


Sueñas que sueñas


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #6 en: 20 Enero 2009, 20:18 »

Cita de: ignorantev1.1
yo decia VB6, se reian y se reian, pero no importa el lenguaje, solo tienes que saber las "TEORIAS BASICAS DE LA REALIZACION DE VIDEOJUEGOS":

Bueno, yo en este sentido no estoy de acuerdo.

Aunque un juego se haga en VB6, la velocidad de ejecución y análisis del mismo, se va a ralentizar enormemente si lo comparas con otro lenguaje de programación(¡depende de qué lenguaje!).
Esto lo tengo demostrado con un programa que hice en VB6 y otro en ensamblador. Hacían los dos lo mismo y el programa en VB6 tardaba más de ¡15 MINUTOS! y había que cerrarlo con Ctrl+Alt+Suprimir y el programado en ensamblador tardaba ¡MILÉSIMAS DE SEGUNDO!. Esto es una bestialidad, pero claro depende de qué juego quieras hacer. (creo que aún tengo los dos programas por ahí por si alguno no se lo cree)

Por ej. en el caso que comenta soplo de ajedrez, fíjate la diferencia que puede haber de un programa en VB6 que por ejemplo analice en 1 segundo = 100.000 jugadas posibles y otro en Visual C++ 6 que por ejemplo analice en 1 segundo = 800.000 jugadas posibles. No hay comparación.

Yo pienso que para determinados juegos NO puedes utilizar Visual Basic 6.

Sé que existen programas genéricos para programar juegos utilizando lo que comentáis: sprites para cada muñeco... no los conozco muy bien. Creo que hay uno conocido llamado Game Marker o algo así y el resultado es bastante bueno.

Un saludo
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.982


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #7 en: 20 Enero 2009, 23:47 »

Si, yo lo intenté en VB6 (con dxlib creo que se llamada la librería..) y simplemente era llenar la ventana de sprites de 32x32 y se ralentizaba eso que daba gusto.. Pero bueno, no desviemos el tema :P
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 579


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #8 en: 24 Enero 2009, 05:16 »

Es cierto me equivoque, el lenguaje si importa... pero si se sabe se puede...


Si quieres ver n perspectiva isometrica, pues habra que dibujarlos asi!!
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.575


Shrödingerificado


Ver Perfil
Re: Programacion de juegos 2D
« Respuesta #9 en: 24 Enero 2009, 07:05 »

Soplo, ¡que alegría verte por aquí! hacía ya tiempo...

No sé si he terminado de entender la pregunta, pero si tienes una serie de imágenes sin perspectiva y quieres ponerlas con perspectiva tendrás que utilizar alguna clase de transformación lineal: http://es.wikipedia.org/wiki/Operador_lineal http://es.wikipedia.org/wiki/Autovector http://es.wikipedia.org/wiki/Homotecia

De todas formas en los juegos que son en 2D eso no se hace en ejecución, sino que las imágenes están ya en perspectiva. Para procesarlas puedes usar matlab o similares, con lo que te sientas cómodo.

La perspectiva de estas imágenes además no termina de ser una perspectiva isométrica auténtica, puesto que no tiene punto de fuga ni nada (date cuenta que la parte de mapa que se ve en Age of Empires 1 y 2 es un cuadrado, mientras que en el 3, que es en 3D, es un trapecio). Supongo que eso reduce el problema a la cuadrícula, que para el controlador es lo mismo, sólo afecta a la vista.
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
soplo
Ex-Staff
*
Desconectado Desconectado

Mensajes: 3.592

Debian rool'z


Ver Perfil
Re: Programacion de juegos 2D
« Respuesta #10 en: 24 Enero 2009, 20:09 »

Hola

Si que hacía tiempo Ragnarok. Ni se poner el tiempo, pero bueno, en este lugar siempre me he sentido en casa aunque ahora ya apenas pueda hablar de ningún tema pues en informática las cosas cambian mucho y mis obligaciones me llevan por terrenos muy distintos de los que se tocan aqui.

El caso es que hace unos dias empecé a jugar a un juego viejo. Civilization II de Sid Meier. Nada que ver con los anteriores. Es en 2D y sin comparación con Civilization III o IV. El caso es que ese jueguecillo me gusta porque los otros son muy grandes y pesados y no tengo tiempo para ello. Existe una versión en linux llamada free-civ que no me gusta aunque es mas o menos el mismo juego.

El caso es que se me ha ocurrido (como diversión) utiilzar los iconos, etc de ese juego y hacerme yo uno que me guste a mi..

Así que mi problema es ver como construir un escenario (un mundo) partiendo de los iconos que ya tengo y desplazar sobre él las unidades y ciudades (cuyos iconos ya existen).

He preguntado por el planteamiento porque aunque entiendo bien bastantes problemas técnicos del juego, el caso es que nunca he programado juegos y eso incluye técnicas que no he visto nunca.

Para empezar yo entiendo que si creo un mundo tendré una tabla donde cada elemento tenga unas características de recursos, tipo de terreno, etc. A cada elemento de esa tabla le corresponde un icono de los que ya tengo, pero para visualizar los elementos de esa tabla sin mas lo veré como un tablero de ajedrez visto desde arriba y eso lo quiero evitar. Quiero poder ver ese escenario desde otro punto de vista. Por eso mi pregunta de como se plantea ese problema ¿Como hacer para que un posible tablero de ajedrez pueda verse desde otro punto de vista que no sea desde arriba?

No quiero entrar en el lenguaje a utilizar porque es lo de menos. Yo lo que quiero saber es como se hace. Como se codifique ya será otro problema.

Un saludo
 ;D
En línea

Callar es asentir ¡No te dejes llevar!
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.982


Ver Perfil WWW
Re: Programacion de juegos 2D
« Respuesta #11 en: 24 Enero 2009, 21:01 »

Citar
Para empezar yo entiendo que si creo un mundo tendré una tabla donde cada elemento tenga unas características de recursos, tipo de terreno, etc. A cada elemento de esa tabla le corresponde un icono de los que ya tengo, pero para visualizar los elementos de esa tabla sin mas lo veré como un tablero de ajedrez visto desde arriba y eso lo quiero evitar. Quiero poder ver ese escenario desde otro punto de vista. Por eso mi pregunta de como se plantea ese problema ¿Como hacer para que un posible tablero de ajedrez pueda verse desde otro punto de vista que no sea desde arriba?

Yo hablo para las paredes...
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4
http://www.wired-weasel.com/users/serhid/blog/?page_id=4

En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.575


Shrödingerificado


Ver Perfil
Re: Programacion de juegos 2D
« Respuesta #12 en: 26 Enero 2009, 07:34 »

Creo que depende, con una librería de gráficos en 3D sería bastante fácil, porque fijarías el punto de vista y listo, pero creo que no tiene sentido usar eso para hacer un juego en 2D.

Así que dependerá de la librería que estés utilizando, es probable que sólo te de funciones para pintar cuadrículas normales, que es lo que no quieres, y tengas que pintarla tú a más bajo nivel, para eso tendrías que tener una función que te transforme la posición en la cuadrícula que es la tabla a la posición en píxeles de la cuadrícula que se muestra en la pantalla en vista isométrica.

Date cuenta de que será una familia de funciones afines. Ahora mismo no me encuentro en condiciones de pensar cómo sería esa familia, así que si tienes problemas para sacarla avisa, puede ser interesante, sobre todo para los que están aprendiendo programación.

De todas formas... yo le echaría un vistazo al enlace que ha puesto (puesto, puesto, puesto...) E0N.
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Programacion de juegos 2D
« Respuesta #13 en: 26 Enero 2009, 13:56 »

Citar
Creo que depende, con una librería de gráficos en 3D sería bastante fácil, porque fijarías el punto de vista y listo, pero creo que no tiene sentido usar eso para hacer un juego en 2D.

tiene bastante sentido. que uses 3D no quiere decir que tenga que ser un juego en 3D, se puede hacer 2D perfectamente con la ventaja de tener a tu disposicion la/s camaras.

una ejemplo lo puedes ver en Space invaders opengl. esta disponible el codigo fuente y el ejecutable. veras que puedes mover la camara a tu gusto, incluso verlo plano.

« Última modificación: 26 Enero 2009, 14:27 por ctlon » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
trabajar en programacion de juegos
Scripting
dato000 2 522 Último mensaje 19 Julio 2012, 02:32
por dato000
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines