Ir al contenido

publicidad

Foto

Dos dudas...


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
6 respuestas en este tema

  • NismoGTR

  • Childrer

  • vida restante: 100%
  • Registrado: 15 abr 2005
  • Mensajes: 34
#1

Escrito 06 octubre 2010 - 15:01

Hola a todos.

Tengo un par de dudas, a ver si me podéis ayudar...

1ª - Estoy metido en plena faena de crear un clon del juego de Activision para Atari 2600, River Raid en XNA... para el que no lo caiga ahora... es este:

Imagen Enviada

Bien, pues resulta que leyendo unos tutoriales sobre movimiento de scroll, he visto que el tio que los escribió utiliza en varias ocasiones el método Vector2.Normalize. Por ejemplo, si:

Vector2 movimiento = new Vector2(10, 24);

If (pulsamos tecla cursor derecha)
{
movimiento.X++;
movimiento.Y--;
}

movimiento.Normalize();

¿Alguien me puede explicar qué se consigue con ello?

2ª - Esta duda es más general. Los juegos que he realizado anteriormente, han sido un pong, un arkanoid, y un asteroids (muy cutres)... evidentemente en los dos primeros no existían enemigos, y en el tercero éstos se generaban aleatoriamente. Pues mi duda es (después de pensarlo mucho), ¿cómo se realiza un juego, por ejemplo un matamarcianos, donde los enemigos no se generen aleatoriamente? Es decir que cuando lleguemos a cierta zona del escenario, pues nos aparezca, por ejemplo, una oleada de un determinado tipo de enemigo... esto lo necesito para el juego en que estoy enfrascado.

Pido que me déis la idea conceptual, si la sabéis. Un saludo y muchísimas gracias a todos.

  • The_Hans

  • Anima

  • vida restante: 100%
  • Registrado: 27 ene 2004
  • Mensajes: 7.490
#2

Escrito 06 octubre 2010 - 16:21

Normalize sirve para normalizar el vector, es decir, para pasar a un rango entre 0 y 1 sus valores. Es muy útil cuando se trabaja con velocidades y direcciones (la dirección es el vector normalizado de la velocidad, por ejemplo).

Sobre la segunda duda no sé cómo contestarte porque es algo muy ambiguo y difícil de generalizar en un ejemplo. La experiencia programando te enseñará cómo hacerlo. En realidad basta con que definas los estados de estos enemigos estilo "aparecer, atacar, morir, resetearse" y cuando pase algo (por ejemplo tu llegada a ese punto que dices) los inicies. Como te digo es algo demasiado concreto.

  • rintin

  • Elder

  • vida restante: 100%
  • Registrado: 12 ago 2003
  • Mensajes: 142
#3

Escrito 06 octubre 2010 - 19:59

Respecto tu segunda pregunta, depende de como concibas los niveles.

Como generas los escenarios, un array de texturas que junto a un factor de tiempo determina que se muestren y avancen correctamente?

Si es así, puedes generar un nuevo array situando en las posiciones que te interese generar enemigos, por ejemplo un array de longitud 2 de tipo entero, donde el primer valor sea el tipo de enemigo (1: enemigo01, 2: enemigo02, 3: boss) y el segundo la cantidad de enemigos a generar. Luego en el ciclo de juego, cuando se muestre esa posicion, compruebas ese indide en el otro array y creas las instancias según su tipo y cantidad.

Hay mil formas y influirá como sea el escenario (una imagen gigante o varias tileadas), como gestiones los eventos, etc. Por tiempo, arrays como en el ejemplo que te comentaba, con dos mapas uno para mostrar y otro para lógica comprobando colisión con PJ... Mil formas.


Un saludo.

  • jakehoyt

  • Yojimbo

  • vida restante: 100%
  • Registrado: 05 ene 2006
  • Mensajes: 1.395
#4

Escrito 06 octubre 2010 - 22:01

Será más fácil darte una idea si dices muy claramente lo que necesitas. Hara un mes hice una minidemo de un juego de aviones, muy sencillo, fue solo poner el scroll de suelo a correr infinitamente por un lado y por otro hacer lo que dicen arriba; ir soltando oleadas de enemigos que se generan arriba, avanzando hacia abajo, y cuando todos son destruidos (por el personaje o por bajar más alla de la pantalla+ su porpia longitud) y cambiaba el scroll cuando acababa con X oleadas (porque mi idea era que solo avanzases cuando eliminases a los enemigos, como un beat´em up con fondo movil) Y en realidad, siempre usaba la misma tabla para todas las oleadas...¿para que crear más?

Así era muy cómodo crearlo, ya que lo que realmente creaba el escenario era crear un objeto que describia las oleadas de enemigos (textura, posición de salida, velocidad, arma, IA, activado o desactivado) y como mucho, cambiaba a otros de los 4 fondos. finalmente tendría que tener un elemento de "salida" que cambie el modo cuando ya termines con el final boss o la última oleada. Y ya tienes un juego de aviones.

  • NismoGTR

  • Childrer

  • vida restante: 100%
  • Registrado: 15 abr 2005
  • Mensajes: 34
#5

Escrito 06 octubre 2010 - 22:51

Bueno, antes que nada, GRACIAS a todos por el interés.

Con relación a la respuesta de Rintin, bueno... me ha costado seguir tu explicación, no te lo tomes a mal. Pero creo que más o menos sé por donde va la idea que intentas describir.

Con respecto a jakehoyt, pues el juego que intento hacer es un shooter de scroll vertical. Según la demo que has hecho, creo que no me serviría, porque yo no necesito crear oleadas de enemigos, eso por suerte sé hacerlo, sino crearlos en determinadas zonas del escenario y en un determinado momento. Es decir, no aleatorios, sino que cuando cierres el programa y vuelvas a empezar otra partida, los enemigos estén siempre en el mismo lugar. En el juego Thunderforce, de megadrive, echases las partidas que echases, siempre los enemigos salían por el mismo sitio. Estaba predefinido.

El concepto de Rintin es el que más se ajusta a lo que me estoy refiriendo.

A ver si alguien más opina.

Un saludo, y de nuevo, muchas GRACIAS.

  • jakehoyt

  • Yojimbo

  • vida restante: 100%
  • Registrado: 05 ene 2006
  • Mensajes: 1.395
#6

Escrito 06 octubre 2010 - 23:07

No me has entendido. Los enemigos son siempre los mismos. verás, es una tabla de seis enemigos (nunca salen más) y cuando se "vacia", pasa a la siguiente oleada, y cada enemigo puede salir de ocho posiciones diferentes, pero siempre sale de la misma. Lo que pasa que yo lo hice por oleadas. Exterminas una, pasas a la siguiente.

En tu caso, es lo mismo, solo que pasas a la siguiente oleada cuando el scroll recorre X pixeles, cargas la siguiente oleada, y ya está.

En mi caso, un objeto enemigo guardaba posición, estado, y otra tabla, con los disparos. Siempre usaba la misma tabla porque una vez "gastados" le daba la orden de sustituirlos por los seis siguientes. En tu caso es como Rintin te ha dicho; según vas llegando, cargas una nueva tabla de enemigos en pantalla, o amplias la que ya existe...

  • rintin

  • Elder

  • vida restante: 100%
  • Registrado: 12 ago 2003
  • Mensajes: 142
#7

Escrito 08 octubre 2010 - 16:09

Bueno, antes que nada, GRACIAS a todos por el interés.

Con relación a la respuesta de Rintin, bueno... me ha costado seguir tu explicación, no te lo tomes a mal. Pero creo que más o menos sé por donde va la idea que intentas describir.

Con respecto a jakehoyt, pues el juego que intento hacer es un shooter de scroll vertical. Según la demo que has hecho, creo que no me serviría, porque yo no necesito crear oleadas de enemigos, eso por suerte sé hacerlo, sino crearlos en determinadas zonas del escenario y en un determinado momento. Es decir, no aleatorios, sino que cuando cierres el programa y vuelvas a empezar otra partida, los enemigos estén siempre en el mismo lugar. En el juego Thunderforce, de megadrive, echases las partidas que echases, siempre los enemigos salían por el mismo sitio. Estaba predefinido.

El concepto de Rintin es el que más se ajusta a lo que me estoy refiriendo.

A ver si alguien más opina.

Un saludo, y de nuevo, muchas GRACIAS.


Es difícil explicarse sin saber los conocimientos en el área de la otra persona. si necesitas una aclaración pregunta que aunque poco me voy pasando por el foro.

Si utilizas para el fondo una única imagen extra-larga, haz otra imagen de las mismas dimensiones con un color plano, y traza por ejemplo líneas horizontales de otro color en los sectores que te interesa aparezcan enemigos. Esa imagen no la pintas por pantalla, pero se actualiza a la par que la del escenario. A partir de ahí, puedes hacer que cuando una linea sobrepase la posición en 0 en el eje Y (teniendo en cuenta que que el 0,0 sea la esquina superior izquierda) generes un enemigo. O que cuando el personaje colisione con zonas de determinado color de ese mapa "lógico" los genere... o sin hacer uso de ese segundo mapa, fijando por código coordenadas relativas respecto al escenario normal...

O lo que te comentaba en el anterior msg si empleas un sistema de tiles... hay muchas formas de hacerlo.


Un saludo.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad