Comunidad de diseño web y desarrollo en internet online

Clásico juego pong

Citar            
MensajeEscrito el 25 Ene 2007 09:36 pm
Estos dias he estad haciendo un juego al estilo clásico del famoso pong :D (por si alguien no lo conoce, es ese de la pelota que rebota todo el rato y al que se le cuele pierde un punto, o lo gana el otro) y me han surgido varios problemas, entre otros, este:

Cuando inicio la pelicula, a la pelota la controlan 2 variables (xball e yball) que se encargan de mover la pelota vertical y horizontalmente, cuando rebota en una pala de los lados pues xball se multiplica *-1 y cuando choca con los limites superior e inferior a la variable yball le sucede lo mismo. Esto es, siempre y cuando los dos jugadores hagan rebotar la pelota, esta siempre hará el mismo trayecto. Resulta monotono. Le he puesto un random() pero no me ha gustado como ha quedado, quiero algo mas profesional. He pensado en hacer una nueva variable y que sea igual a la resta de la altura de la pala con la de la pelota para sumarselo a la variable yball. No se porque pero me hacia una cosa muy rara y, tras 2 golpes, esta variable se ponia a 450 aprox. ... no lo entiendo... . :crap:


Bueno, espero que alguien me de un consejo de como hacer que la pelota rebote con mas o menos angulo dependiendo de lo lejos que se le haya dado al bode de las palas de los lados. Gracias ^^

Por infernalpr

236 de clabLevel



 

LoL

firefox
Citar            
MensajeEscrito el 26 Ene 2007 03:08 am

Por esutoraiki

Claber

548 de clabLevel

4 tutoriales

Genero:Masculino  

Aplicaciones para Web

opera
Citar            
MensajeEscrito el 26 Ene 2007 01:35 pm
sisi, el juego ya lo tengo hecho, solo le falta hacerlo un poco mas... no se... que la pelota no haga los mismos movimientos siempre, o sea, que no siempre se multiplique por -1, que dependiendo donde de que se multiplique por un termino u otro para variar el ángulo, por ejemplo:

( .| ) si choca en la parte de abajo que el angulo se reduzca un poco y si da en medio ( ·| ) que el angulo sea el mismo con el que venia. Todos los rebotes los tengo hechos, solo quiero darle algunos efectos mas realistas y cuando tenga todos los códigos y todo me meto con los gráficos.

Si quieres ver como le llevo, clica aqui

PD: Si te va ralentizado es po culpa de imageshack =S
PD2: Gracias por tu atención

Por infernalpr

236 de clabLevel



 

LoL

firefox
Citar            
MensajeEscrito el 26 Ene 2007 04:03 pm
A ver, espero poder ayudarte. Lo que tenés que considerar es cambiar un poco el tema del ángulo.

Bien, pensá en esto, las paletas tienen un alto determinado, que conseguís con la propiedad _height.

Ahora, si el punto de anclaje está en el centro de las paletas (lo que simplificaría mucho el código), obtenés el punto más alto y el punto más bajo de la paleta con este código:

Código :

ypos = paleta._y;
altura = paleta._height;
//
puntoMax = ypos + altura / 2;
puntoMin = ypos - altura / 2;


Ahora, podés imaginar a la paleta dividida en 2 por una línea horizontal que atraviese el centro de la paleta. Cuando la pelota la golpee va a desviarse de su trayectoria y la desviación debería ser relativa a la distancia respecto al centro de la paleta.

Cúal es la desviación? Bien, hacés un cálculo que diga la distancia en y entre el centro de la pelota y el centro de la paleta. Entonces, cambiás el ángulo en consecuencia.

Si la pelota golpea en el centro de la paleta, el nuevo ángulo podría ser, *= -1. Pero si pega en el borde, pasaría a ser *= -2

Ahora, pensá en eso. Hay un error de concepto. Lo encontraste?

Suponiendo que lo hayas pensado, habrás descubiertto que la velocidad de la pelota varía junto con el ángulo.

Oh sorpresa, para variar el ángulo tenés que hacer más modificaciones, como variar xball por -1, como venís haciendo, pero yball por 0.5. Pero la velocidad de la pelota va a variar.

Obstáculo insalvable? Casi.

Podés hacer un código muy superior empleando ángulos reales y calculando la posición de la pelota en base a la trigonometría.

Si, ya sé que requiere conocimientos en la matería.

Pero no muchos.

Lo primero es definir la velocidad real a la que se va a mover la pelota. Entonces, declaramos la variable velocidad. Más abajo, lo que hacemos es cambiar velX y velY empleando la variable velocidad y el ángulo en que se mueve la pelota (en radianes). El código sería éste:

Código :

var velocidad:Number = 10;
var velX:Number;
var velY:Number;
var angulo:Number;
//
velX = velocidad * Math.sin (angulo);
velY = velocidad * Math.cos (angulo);
//
bola._x += velY;
bola._y -= velY;


Ahora, lo único que te queda por hacer es cambiar la variable angulo y ver como la pelota se mueve siempre a la misma velocidad y en cualquier dirección. No te olvides de pensar en la paleta dividida para saber cuánto vas a modificar el ángulo y listo. El resto te lo dejo a vos, pero, pensar en éste tipo de cosas me dio una idea y si encuentro tiempo voy a empezar un tutorial sobre cómo armar éste juego y un Arkanoid, con suerte lo termino y lo posteo dentro de muy poco.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 05 Feb 2007 09:40 pm
Al final consegui hacerlo de otra manera, asi:

Código :

if (_root.ball.hitTest(_root.paredizq) && _root.ball._x<=55) {
      yball=(((ball._y+ball._yscale/2)-(paredizq._y+paredizq._yscale/2))/15)
      xball=xball*-1+0.2
}
if (_root.ball.hitTest(_root.paredder) && _root.ball._x>=470) {
      yball=(((ball._y+ball._yscale/2)-(paredder._y+paredder._yscale/2))/15)
      xball=xball*-1-0.2
}


Asi consigue el efecto que deseaba, aunque no exactamente, se acerca muchisimo. Saludos

Por infernalpr

236 de clabLevel



 

LoL

firefox
Citar            
MensajeEscrito el 06 Feb 2007 03:39 am
Estoy a punto de terminar el tutorial que mencioné en mi post anterior, lo único que me queda por hacer es termianr el comportamiento de la paleta que controla la computadora (que, por cierto, es bastante complejo) cuando lo termine, lo posteo y pongo el link en este tema.

Como el juego en el que estoy trabajando tiene montones de elementos extras (hay un efecto agregado donde si a la pelota le pegás con la paleta en movimiento, ésta sigue una trayectoria curva, entre otras tantas cosas) quizá puedas aprender algo para implementar o, hasta replantearte el trabajo y empezar de nuevo, no sé.

De todos modos, lo hice mayormente por vos y espero que te sea útil (cuando veas lo largo que es el tutorial vas a ver porqué demoré tanto).

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 08 Feb 2007 02:55 am

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.