Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Cómo poner enemigos en una posición de la pantalla fuera de la cámara?

Iniciado por Kevinok, 10 de Marzo de 2013, 11:49:29 AM

« anterior - próximo »

Kevinok

Hola, me llamo Kevinok y estoy intentando hacer mi primer juego en SDL.

Mi intención es hacer un sidescroller muy simple, para ir aprendiendo y por ello he utilizado los tutoriales de lazyfoo http://lazyfoo.net/SDL_tutorials/index.php

El problema que tengo ahora mismo es que acabo de poner mi cámara y antes el único enemigo que tenía estaba siendo mostrado directamente en la pantalla sin embargo ahora me gustaría que estuviera al final del nivel y no se como hacer esto. Tengo que hacer que esté en unas coordenadas pero lo único que se me ocurre es que de repente aparezca al llegar allí y no que ya esté. Es decir chequear que se llega a un punto y de repente por arte de magia aparezca.

¿Cómo se colocan los enemigos en un nivel normalmente? (He estado buscando en un montón de sitios pero la verdad es que no se exactamente como se llama lo que intento hacer)

Kevinok

Bueno me contesto yo mismo.

Lo único que tengo que hacer es pintarlos fuera de la cámara como si hubiera una imagen muy grande y luego que aparezcan dependiendo de lo que la cámara está mirando.

Gracias de todas formas :)

[EX3]

Cita de: Kevinok en 10 de Marzo de 2013, 12:26:35 PM
Lo único que tengo que hacer es pintarlos fuera de la cámara como si hubiera una imagen muy grande y luego que aparezcan dependiendo de lo que la cámara está mirando.
Mal. Si pintas todo lo que esta fuera de la camara lo que vas a lograr es que tu juego vaya muy lento y consuma más recursos al procesar más llamadas de dibujo de las que deberian hacerse. Tienes que dibujar unicamente lo que vaya a verse en la vista de camara, el resto descartalo.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

[EX3]

Cita de: Kevinok en 10 de Marzo de 2013, 11:49:29 AM
¿Cómo se colocan los enemigos en un nivel normalmente? (He estado buscando en un montón de sitios pero la verdad es que no se exactamente como se llama lo que intento hacer)
Lo primero que debes hacer es olvidarte de pensar en lo que ves en pantalla, tienes que olvidarte de que tienes un area de 800x600, 1204x768, etc... y pensar en que tienes un espacio ilimitado como quien dice para definir tu escena con todos sus elementos. Ese espacio puede ser de 1000x1000 como 500000x2000000, da igual. Tu camara no deja de ser una coordenada en ese espacio, el centro de un cuadro que es el que define lo que se ve en la pantalla. Si piensas asi te daras cuenta de que tu elementos se ubican simplemente en las coordenadas que les pongas a la hora de diseñar el escenario igual que harias en la cuadricula de un cuarderno por ejemplo. La camara lo que hace es indicarte que area estas navegando de la escena y en base a esa coordenada muestras los elementos que alli se encuentran (esto lo haces comprobando si el area rectangular que ocupa el elemento esta en contacto con el area de la camara).

¿Como haces para que se muestren esos elementos de tu escena en las coordenadas de la pantalla? Lo primero que tienes que tener claro es que debes saber separar la logica del dibujo. Para dibujar el elemento en pantalla solo has de sumarle las coordenadas de la camara a las coordenadas de cada elemento a la hora de dibujarlo, pero no cambiar las coordenadas logicas del elemento, la posicion real del elemento en la escena no se tiene que ver afectado por esa coordenada.

Yo creo que si buscas bien tienes que encontrar si o si algun ejemplo de juego con scroll lateral/multidireccional ya que es algo muy comun en la mayoria de los juegos, de esa manera, con codigo, quizas lo puedas ver más claro como funciona el uso de una camara.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Kevinok

Cita de: [EX3] en 10 de Marzo de 2013, 07:06:48 PM
Cita de: Kevinok en 10 de Marzo de 2013, 12:26:35 PM
Lo único que tengo que hacer es pintarlos fuera de la cámara como si hubiera una imagen muy grande y luego que aparezcan dependiendo de lo que la cámara está mirando.
Mal. Si pintas todo lo que esta fuera de la camara lo que vas a lograr es que tu juego vaya muy lento y consuma más recursos al procesar más llamadas de dibujo de las que deberian hacerse. Tienes que dibujar unicamente lo que vaya a verse en la vista de camara, el resto descartalo.

Salu2...

Pero si no lo dibujo estando fuera del dibujo tengo que andar comprobando donde está la cámara para saber que pintar. Entonces tengo que mirar cada iteración si está o no está dentro. para poder pintar mi enemigo. ¿Es eso lo que dices no?

[EX3]

Cita de: Kevinok en 11 de Marzo de 2013, 05:03:23 PM
Pero si no lo dibujo estando fuera del dibujo tengo que andar comprobando donde está la cámara para saber que pintar. Entonces tengo que mirar cada iteración si está o no está dentro. para poder pintar mi enemigo. ¿Es eso lo que dices no?
Mas o menos si. En cada iteracion tendras que comprobar que objetos estan en la vista de la camara. La camara no tienes que ir comprobando donde esta en cada iteracion, esto lo sabes siempre por su coordenada.

Una explicacion visual para que lo veas:



Quizas te estaras preguntando si es optimo comprobar centenares de elementos en cada iteracion. Existen varias formas de optimizar esto. Si es un sistema de tiles regulares (una rejilla de celdas) es tan facil como solo comprobar las celdas o elementos que esten dentro del area que ocupa la ventana segun su coordenada y descartar directamente el resto de la escena. Si trabajas sin rejilla, con elementos de distintos tamaños, cosa habitual hoy dia en la mayoria de juegos, lo que puedes hacer, o al menos es lo que yo hacia, es dividir tu escena en zonas que abarquen un area rectangular concreta, de esta manera, en vez de comprobar toda la escena solo compruebas el area o areas que esten en contacto con la vista de la camara.

La misma vista de antes pero con areas que dividen la escena:



Si te fijas, con la separacion por areas solo tendrias que buscar que objetos estan dentro del area donde se encuentra la camara y simplemente realizar la comprobacion con ellos. El resto automaticamente los descartamos.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Kevinok

¡Ok! Esto me parece mejor sí. Intentaré hacerlo así ahora.

¡Gracias por la respuesta!

technobroken

pongo mi granito de arena. tb hay que tener en cuenta que a la hora de dibujar hay que restar la posicion del personaje al de la camara para que asi se dibuje en coordenadas de la camara sino aunque el personaje este dentro de la camara este no se dibujara.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.