Ir al contenido

publicidad

Foto

Ayuda para la programacion del videojuego ARKANOID


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

  • CjCalc

  • Ultima

  • vida restante: 100%
  • Registrado: 09 may 2008
  • Mensajes: 3.104
#1

Escrito 03 agosto 2009 - 17:46

Saludos.

Es raro que me vean por aqui, pero a pesar de ser un experto en programacion (e programado en c/c++/c##...) estoy teniendo serias dificultades para la creación de mi ARKANOID.

Basicamente y para los que no lo sepan, estoy haciendo el clasico juego de una bola que cae, y una raqueta o plataforma abajo que hace que al impactar la bola con la plaqueta, esta (la bola) vuelva a subir.

Por el momento no he creado ladrillos ni nada, lo que e conseguido es que si la bola sobrepasa la raqueta obviamente es que ha ido fuera de juego y por tanto bola fallida. Eso esta bien pero me estoy volviendo loco por que no consigo dar con el algoritmo para hacer o mejor dicho detectar el momento en el cual la bola esta tocando o casi rozando la plataforma o raqueta. Como detectar eso.

Es necesario decir que lo estoy haciendo en un entorno 3d, lo cual obviamente mis dudas dejan que desear, aunque creo que es posible. No solo utilizo como de costumbre hacia antes las coordenadas x y sino x,y,z.

Ademas lo que estoy haciendo es un GIG (Game In Game) es decir, estoy programando el juego ya creado por otra gente Blade: the edge of dakness y estoy haciendo que se permita jugar al arkanoid dentro de este mismo juego pausando la partida en cualquier momento.

Os comento como logre hacer que si la pelota sobrepasa la raqueta , se detecte que la pelota se ha colado (es decir que no se ha tocado).

Lo estoy programando en python, pero da igual aqui el lenguage, es solo algoritmo o la idea o concepto de como se deberia hacer eso de golpear la bola. Yo luego lo adaptaria al codigo.

[code:1]
xr,yr,zr=raket.Position
xb,yb,zb=ball.Position

if yb>yr:
caida=1
bolas_caidas=bolas_caidas+1

[/code]

Basicamente si la coordenada y (arriba / abajo) si la y de la bola es mas grande que la y de la raqueta, quiere decir que se ha colado.

Como puedo ahora detectar si la raqueta toca la bola??

  • Ellolo17

  • Máscara de Majora

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#2

Escrito 03 agosto 2009 - 18:17

Tienes las dimensiones de la raqueta y el punto donde se originan. Segun el motor ese punto suele ser o el centro o una esquina. Tendrias que comprobarlo.

Asi que cuando la posicion Y de la bola sea la misma Y que la raqueta, tienes que comprobar que la posicion X y Z no se encuentran entre el punto de origen y el tamaño X e Y de la raqueta.

Por ejemplo, la altura a la que esta la raqueta es y=0
El tamaño x es 1
el tamaño z es 1
el tamaño y es irrelevante.

Cuando la bola llega a la altura Y=0 se encuentra en las coordenadas x= 5, y= 3
La paleta se encuentra en la posicion x= 5 y=0

Asi que comprobamos. El punto de origen es 5,0. Asi que paleta ocupa en el eje x de la coordenada 5 a la coordenada 6 y de la coordenada 0 a la coordenada 1

Como la posicion de la bola coincide solo con uno o ninugno pues sigue para fuera. Tienen que coincidir x e y -bueno, coincidir no, si no coincidir que la pelota se encuentre entre las coordenadas de la paleta- para que se considera que da en la raqueta.

Entonces, rebota.

¿Es esto lo que necesitas?

  • CjCalc

  • Ultima

  • vida restante: 100%
  • Registrado: 09 may 2008
  • Mensajes: 3.104
#3

Escrito 03 agosto 2009 - 22:01

Si algo asi pero no se como implementarlo en algoritmica o sea en el codigo , o sea cual seria mas o menos la condicion.

  • Pampito

  • HARENA TIGRIS

  • vida restante: 100%
  • Registrado: 02 ene 2003
  • Mensajes: 8.316
#4

Escrito 04 agosto 2009 - 06:32

Tomamos que las coordenadas del objeto están en el centro del mismo. Raqueta cuadrada (plana; sin grosor) y bola esférica. Doy por sentado que siempre nos movemos en una zona espacial con coordenadas positivas.

La bola tiene coordenadas (xb,yb,zb) y r de radio. La raqueta (xr,yr,zr), l de lado

Si no tengo muy olvidado el C una solución sería:

mitad_lado=l/2;

if ((yb-r)-yr)==0)//La distancia entre los centros es el radio de la pelota en el //eje y
{
if ((xb>xr-mitad_lado)&&(xb {
if ((zb>zr-mitad_lado)&&(zb //Aqui el código que gestione el rebote
}
}


Es muy burdo por que se comportará como si la bola fuera un cubo pero lo mismo te sirve para hacerte una idea.

Probablemente mirando que la distancia entre el centro de la bola y el plano xz sobre el que esté la raqueta (que sea el radio de la bola). Luego de eso una segunda comprobación de la distancia entre el centro de la raqueta y el centro de la bola (que sea menor la mitad del lado) te haga un rebote mucho mas fino y no sea mucho mas costoso en tiempo de ejecución. Pero hay que repasar geometria matemática y ya para eso no tengo muchas ganas. XD

  • CjCalc

  • Ultima

  • vida restante: 100%
  • Registrado: 09 may 2008
  • Mensajes: 3.104
#5

Escrito 04 agosto 2009 - 20:25

Muchisimas gracias.

Me ha funcionado pero he cambiado algo en la condicion, de todas formas muchas gracias.

Ahora tengo que mejorar el efecto del rebote, pronto pondre un video en youtube para que os hagais una idea de como me esta quedando.

Nos vemos.


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