Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Consultas de unas partes de codigo.

Iniciado por Netto22, 22 de Noviembre de 2008, 12:45:43 AM

« anterior - próximo »

Netto22

Estoy realizando, gracias a los tutos que anteriormente me disteis, los primeros pasos en esto y en el desarrollo del codigo del Pong me han salido varias complicaciones al intentar "entender" una parte del codigo que seria mas bien esta.



// Colisiones con Paleta 2
if(Velocidad_Bola_X >0 && X_Bola<X_Paleta_2 //Si la bola esta en zona de colisionar con la paleta 2
&& X_Bola+Ancho_Bola/2>=X_Paleta_2-Ancho_Paleta_2/2)


Es un extracto del codigo que escribi.

La cosa es que entiendo la gran parte del codigo y podria volver a hacerlo y quizas optimizarlo un poco en ciertas partes, pero no comprendo el porque hay a veces divisiones a la mitad de algunas variables o multiplicaciones de 0.5.
Es porque la bola tiene que colisionas con "la mitad de esa variable"? es decir con una de las mitades de la barra (en el caso de las paletas la parte orientada hacia el "campo" de ahi que se use la parte de la coordenada X)?

Pero al ser eso no lo pillo porque si busca el contacto con la variable X en su parte > o =  no seria mas bien este esuqema?                |< - - - y no - - - >| ????

Despues otra consulta que tengo es que tengo todo hecho hasta que la bola desaparece por algun lado, en este caso deberia volver a declarar el inicio del juego con un if?

DarkFenix

Cita de: Netto22 en 22 de Noviembre de 2008, 12:45:43 AM
pero no comprendo el porque hay a veces divisiones a la mitad de algunas variables o multiplicaciones de 0.5.
Es porque la bola tiene que colisionas con "la mitad de esa variable"? es decir con una de las mitades de la barra (en el caso de las paletas la parte orientada hacia el "campo" de ahi que se use la parte de la coordenada X)?

    Ehm... sí, podría ser para saber a qué dirección o velocidad tiene que ir la pelota tras el choque. Es decir, si golpea en la parte mitad-izquierda o en la parte mitad-derecha.

   También es muy común las reducciones en las colisiones como ajuste. Cuando creas un imagen cuadrada, vas a tener zonas que no debería formar parte de la colisión, una forma de optimizar el choque sin "castigar" con demasiados cálculos es reducir el cuadrado que enmarca la imagen.

   Échale un vistazo a este artículo: http://www.gamedev.net/reference/articles/article735.asp y lo verás más claro.



CitarPero al ser eso no lo pillo porque si busca el contacto con la variable X en su parte > o =  no seria mas bien este esuqema?                |< - - - y no - - - >| ????


   El eje coordenado X es el horizontal, Y es la vertical.


CitarDespues otra consulta que tengo es que tengo todo hecho hasta que la bola desaparece por algun lado, en este caso deberia volver a declarar el inicio del juego con un if?

   Puedes crear un punto de parada. Si la bola sale por la izquierda muestras: Minipunto para Jugador 2, si sale por la derecha: Minipunto para Jugador 1.

   Lo suyo es que al N número de minipuntos uno de los jugadores gane la partida. Se muestra un mensaje: Jugador X ganó. Y sales al menú principal del juego.

   Para hacer eso, puedes usar una estructura de repetición controlando el número de minipuntos que se han jugado. Para el bucle principal, puedes usar otra estructura de repetición donde la salida sea una variable booleana de fin de minipunto (y sería recomendable que también se controlara si el jugador quiere salir).


Netto22

#2
CitarPuedes crear un punto de parada. Si la bola sale por la izquierda muestras: Minipunto para Jugador 2, si sale por la derecha: Minipunto para Jugador 1.

   Lo suyo es que al N número de minipuntos uno de los jugadores gane la partida. Se muestra un mensaje: Jugador X ganó. Y sales al menú principal del juego.

   Para hacer eso, puedes usar una estructura de repetición controlando el número de minipuntos que se han jugado. Para el bucle principal, puedes usar otra estructura de repetición donde la salida sea una variable booleana de fin de minipunto (y sería recomendable que también se controlara si el jugador quiere salir).

Para lo del punto de parada puedo utilizar la misma estructura y adaptarla para que en vez de rebotar en las paredes se reposicionara en el centro con un break y despues llevandolo de nuevo al inicio del loop pero con la unica diferencia de una variable marcador que sea int y se muestre en la parte de arriba tal que asi?

BEGIN

// INICIALIZAR ASPECTOS GRAFICOS

set_title("XXXXX"); // Establece el titulo de la ventana
Full_screen = false; // No utilizaremos la ventana a pantalla completa
Graph_mode = mode_16bits; // Modo de graficos a 16 bits
set_mode (m800x600); // Resolucion utilizada
set_fps(60, 60/10); // Establecemos el numero de Frames Por Segundo

RESOLUCION_X = 800; // Almacenamos en dos variables la resolucion
RESOLUCION_Y = 600; // Para utilizarlas despues 



// ESCRIBIR LA INFORMACION SOBRE EL JUEGO EN PANTALLA
write(0,10,10,0, "XXXXXXXX");
write(0,10,20,0, "XXXXXXXX");
write_int(0,200,30,0, &p1);
        write_int(0,400,10,1, &fps);
        write_int(0,600,30,0, &p2);

//HEMOS TERMINADO DE INICIALIZAR. LANZAMOS EL BUCLE PRINCIPAL
Controlador_Juego(); // Arrancamos el controlador del juego
END


Tal que p1 = Variable puntuacion integer de jugador 1 y p2 = Variable puntuacion integer jugador 2.

Despues seria cuestion de poner un repeat...... else p1 or p2 = X Donde X = Valor final del partido, saliendo despues con un break, o simplemente un End?






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.