En este capítulo estudiaremos como se detecta si la pelota ha golpeado una barra, y por tanto debe salir rebotada, o si la pelota ha sobrepasado una barra y por tanto se debe anotar un punto al jugador contrario. Veremos que si pelota toca una barra en su zona central, saldrá rebotada en sentido contrario pero con el mismo ángulo. Si la pelota toca la barra en un extremo, haremos que salga rebotada con un ángulo diferente, tal como ocurriría en la realidad.
-- funcion control puntos function controlpuntos() if x >= 465 then
Esta condicional comprueba si el centro de la pelota ha llegado al límite derecho de la pantalla.
if y >= (PosBarraDrch - 30) and y <= (PosBarraDrch + 30) then
Esta condicional comprueba si la coordenada Y de la pelota se encuentra dentro de los extremos de la barra derecha, para hacerla rebotar.
En el siguiente dibujo vemos todas las variables implicadas:
AngPelota = pi – AngPelota
Modificamos el ángulo de la pelota para hacerla cambiar de dirección.
local sonido = SonidoBarra voz = sonido:play()
Ejecutamos el sonido del rebote en la barra.
NumGolpes = NumGolpes + 1
Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.
elseif y < (PosBarraDrch - 30) and y > (PosBarraDrch - 35) then
Si no se cumple la condicional anterior, comprobamos si la pelota ha tocado la esquina superior de la barra, para hacerla rebotar con un ángulo diferente.
En el siguiente dibujo vemos todas las variables implicadas:
AngPelota = pi - AngPelota + AngPico
Modificamos el ángulo de la pelota.
local sonido = SonidoEsquina voz = sonido:play()
Ejecutamos el sonido del rebote en la esquina de la barra.
NumGolpes = NumGolpes + 1
Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.
elseif y > (PosBarraDrch + 30) and y < (PosBarraDrch + 35) then
Si no se cumple la condicional anterior, comprobamos si la pelota ha tocado la esquina inferior de la barra, para hacerla rebotar con un ángulo diferente.
AngPelota = pi - AngPelota – AngPico
Modificamos el ángulo de la pelota.
local sonido = SonidoEsquina voz = sonido:play()
Ejecutamos el sonido del rebote en la esquina de la barra.
NumGolpes = NumGolpes + 1
Sumamos 1 al contador de golpes utilizado para aumentar la velocidad de la pelota.
else
Si tampoco se cumple la condicional anterior, es decir si la pelota no toca la barra ni una esquina, deberemos anotar 1 punto al jugador contrario.
local sonido = SonidoPunto voz = sonido:play()
Reproducimos el sonido de punto conseguido.
PuntosIzda = PuntosIzda + 1
Sumamos 1 punto al jugador de la izquierda.
x = 450 y = 136
Establecemos las coordenadas de la pelota para iniciar un nuevo punto.
aleatorio()
Hacemos una llamada a la función aleatorio() para que nos de un ángulo de saque aleatorio.
AngPelota = AngPelota + pi
Se cambia el ángulo de la pelota para que se desplace hacia la izquierda, ya que la función aleatorio() sólo devuelve ángulos hacia la derecha.
NumGolpes = 0
Reseteamos el contador de golpes a 0, pues se inicia un nuevo punto.
screen.waitVblankStart(80)
Hacemos un pequeña pausa de 80/60 segundos, para que de tiempo a ver que la pelota sobrepasó la barra.
if PuntosIzda == puntos then finjuego() end
Si los puntos que ahora tiene el jugador izquierdo han llegado al número de puntos establecido para el juego, se hace una llamada a la función finjuego(), la cual veremos en el capítulo 6 que realiza la finalización del juego.
end end
A continuación se hace exactamente lo mismo, pero comprobando si la pelota ha llegado al límite izquierdo de la pantalla.
-- Lado Izdo if x <= 15 then if y >= (PosBarraIzda - 30) and y <= (PosBarraIzda + 30) then AngPelota = pi - AngPelota local sonido = SonidoBarra voz = sonido:play() NumGolpes = NumGolpes + 1 elseif y < (PosBarraIzda - 30) and y > (PosBarraIzda - 35) then AngPelota = pi - AngPelota - AngPico local sonido = SonidoEsquina voz = sonido:play() NumGolpes = NumGolpes + 1 elseif y > (PosBarraIzda + 30) and y < (PosBarraIzda + 35) then AngPelota = pi - AngPelota + AngPico local sonido = SonidoEsquina voz = sonido:play() NumGolpes = NumGolpes + 1 else local sonido = SonidoPunto voz = sonido:play() PuntosDrch = PuntosDrch + 1 x = 30 y = 136 aleatorio() NumGolpes = 0 screen.waitVblankStart(80) if PuntosDrch == puntos then finjuego() end end end end
A continuación veremos la función aleatorio() la cual calcula un ángulo de saque aleatorio. De esta forma la dirección inicial de la pelota no será siempre la misma.
-- Funcion saque aleatorio function aleatorio() aleat = math.random(1,4) if aleat == 1 then angulo = -30 elseif aleat == 2 then angulo = -20 elseif aleat == 3 then angulo = 20 elseif aleat == 4 then angulo = 30 end AngPelota = (angulo * pi) / 180 end
Mediante este grupo de comandos se calcula la dirección inicial de la pelota, de forma aleatoria. La función matemática math.random(1,4) devuelve un número pseudoaleatorio comprendido entre 1 y 4. En función de este número se selecciona el ángulo que forma la dirección de desplazamiento de la pelota.
El ángulo devuelto por la función siempre hace desplazar la pelota hacia la derecha de la pantalla. Por tanto cuando se produzca el saque desde el lado derecho de la pantalla, como vimos en la función controlpuntos(), le debemos sumar pi (180 grados) para que se desplace hacia el lado izquierdo.
Comentarios
Pues si, pero para que
Pues si, pero para que comentar que no le entiende.
Seguro solo para ganarse un SceneBito xD
PD: No quiero crear una discusion de esto
Salu2..!! :D
Silverstein fijate en la
Silverstein fijate en la fecha de los post
No ervivas post muertos mira la fecha de este: Mar, 2006/09/26 - 20:35
hace tres años ...!!!
Esto no es
precisamente un post muerto, es mas bien un tuto ¬¬, fijate bien y en la pagina principal de SB no sale en los temas activos
mmmmmmmmmmmmm
aaaaaaaaaa no le entiendo aaaaaa ya me desespere aaaaaaaaaaaaaa yo kiero ser un coder pero no le entiendo a nadaaaaaaaa del lua player aaaaaaaaa
ya perdi la esperansa es la 2 ves k lo leo
despues de mucho aqui estoyy, oigan saben porque no puedo ver el foro de psp
scenebeta? si sabes mandame un MP
muy bueno
ahora lo pruevo
Muuuuubien pucelano Muuuuuubien
Este es un gran trabajo
Un saludo:Peseperos
Muuuuuy agradecido
Espero que este tutorial os sea útil a muchos.
Un saludo
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.
Descargar Homebrew de BETA, gratis. Visualizar un tutorial, gratis. Iniciarse en la programacion en español, gratis. Colaborar a que la scene PSP en español crezca, no tiene precio.