Karoshi MSX Community
05 de Julio de 2021, 08:20:40 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2] 3 4 5
  Imprimir  
Autor Tema: DESCUBRIENDO EL PONG  (Leído 23666 veces)
0 Usuarios y 1 Visitante están viendo este tema.
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #15 : 10 de Octubre de 2007, 08:58:27 pm »

ok, ok, lo tengo.
Sapphire, una vez más! grácias!
ahora que ya esta funcionando, me asaltan nuevas dudas:

La primera, de paquete total es: ¿que tengo que hacer en el portatil para pulsar "control+stop" e interrumpir el programa con blue msx?

La segunda: He introducido la pala, y la muevo desde los cursores, pero no consigo que la pelota rebote al tocarla, he estado probando pero parece ser que el point este, no vale... asi que he probado activando la colisión de sprites con SPRITE ON pero basta con tocar las teclas, solo, para que la pelota cambie de dirección...
Asi que ¿Que metodo deberia utilizar?

y la tercera y ultima: me gustaria que la bola fuese cada vez mas rapido, habia pensado en hacer algo asi:

T=INT(TIME/50)+1

Y Despues sumarle en cada vuelta el valor de t a X o a Y, pero se ve que no funciona... ¿como se debe hacer esto?
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #16 : 11 de Octubre de 2007, 07:16:32 am »

Si no has cambiado la configuración por defecto, creo que el equivalente en BlueMSX de CTRL+STOP es CTRL+RetrocederPágina.

En cuanto a tu otra pregunta, efectivamente, POINT no te vale. POINT lee el color del fondo, pero nunca leerá los sprites porque estos quedan por encima del fondo gráfico. Podrías hacerlo con SPRITE ON:ON SPRITE GOSUB XXX, pero tampoco me parece una buena solución. Te recomendaría que comprobases coordenadas, simplemente. Es decir, si la pelota está horizontalmente al lado de la pala y la coordenada vertical no es superior a la parte alta de la pala, ni inferior a la baja, entonces ejecuta el rebote.

Esta técnica viene a llamarse "dirty rectangles". Asegúrate de que haces los ajustes correspondientes a la anchura y altura de la pala y de la pelota para que funcione correctamente.

Y sigue probando Smiley
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #17 : 11 de Octubre de 2007, 11:38:47 am »

gracias robsy! me pongo con ello...
aunque  mi pala está formada por 3 sprites de 8*8, asi que me imagino que tendre que tener en cuenta la distancia total de los 3 sprites (px,py)(px,py+8)(px,py-8)

lo que dudo es como programar esa condición, como seria?

imaagino que algo asi:

IF X=PX AND...

¿Como seria para decirle que no es mayor? DIOSSSS QUE PAQUETE!!!!!!!

MUCHAS GRACIAS!
En línea
SapphiRe_MSX
Visitante
« Respuesta #18 : 11 de Octubre de 2007, 11:53:46 am »

¿Como seria para decirle que no es mayor? DIOSSSS QUE PAQUETE!!!!!!!

NOT (A>B) equivale a (A<=B)

Tongue
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #19 : 11 de Octubre de 2007, 12:16:17 pm »

Shappire! eres el amo de la sintesis, jejej, mil gracias!

entonces si lo he entendido seria algo asi como:

IF X=PX AND Y<=PY+8 AND Y>=PY-8 THEN VX=-VX

Si?Huh??

no tengo aqui ningun emulador funcionando para probarlo... y lo quiero saber.
poooooorrrr faaaavoooooorrr!!!! :god:
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #20 : 12 de Octubre de 2007, 05:43:59 pm »

bueno, despues de unas cuantas pruebas he dado con ello, gracias a todos otra vez!
ya tengo la pelota rebotando en el recinto y también cuando se encuentra con la pala, que bieeeeeeeeennn!!!!!!!!!
ahora mi siguiente duda es como conseguir que la pelota vaya cada vez mas rapido segun pase el tiempo, no consigo hacerlo...
¿alguna pista? muchas gracias!
Salud!
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #21 : 13 de Octubre de 2007, 10:29:48 am »

bueno, despues de unas cuantas pruebas he dado con ello, gracias a todos otra vez!
ya tengo la pelota rebotando en el recinto y también cuando se encuentra con la pala, que bieeeeeeeeennn!!!!!!!!!
ahora mi siguiente duda es como conseguir que la pelota vaya cada vez mas rapido segun pase el tiempo, no consigo hacerlo...
¿alguna pista? muchas gracias!
Salud!

solo tienes de ir incrementando una variable contador y cuando llege a cierto numero incrementas la velocidad de la bola y pones esa variable contador a cera

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar


espero que te sirva.
En línea
SapphiRe_MSX
Visitante
« Respuesta #22 : 13 de Octubre de 2007, 10:40:14 am »

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar

Realmente lo ideal sería trabajar con vectores e ir aumentando la velocidad lineal de forma constante, no las componentes individuales. Es decir aumentar el módulo del vector, no sus componentes. De momento creo que no tienes ningún código que cambie los ángulos de la bola, ¿verdad? Si es así esta solución es más que suficiente... prueba...
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #23 : 13 de Octubre de 2007, 12:24:49 pm »

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar

Realmente lo ideal sería trabajar con vectores e ir aumentando la velocidad lineal de forma constante, no las componentes individuales. Es decir aumentar el módulo del vector, no sus componentes. De momento creo que no tienes ningún código que cambie los ángulos de la bola, ¿verdad? Si es así esta solución es más que suficiente... prueba...


Shapp, si puedes expandir un poco mas las explicación te lo agradeceria mucho, ya que yo de mates ando muy cojo y me vendria muy bien Smiley
(con seudo codigo me apañaria bien)
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #24 : 13 de Octubre de 2007, 07:48:23 pm »

solo tienes de ir incrementando una variable contador y cuando llege a cierto numero incrementas la velocidad de la bola y pones esa variable contador a cera

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar



como compruebo si los valores son positivos o negativos robsy?
por cierto ayer estuve jugando al pong que convertiste a msx, esta muy guapo tio, muy rapido!
gracias otra vez!
saludos.
En línea
SapphiRe_MSX
Visitante
« Respuesta #25 : 14 de Octubre de 2007, 01:33:20 am »

Shapp, si puedes expandir un poco mas las explicación te lo agradeceria mucho, ya que yo de mates ando muy cojo y me vendria muy bien Smiley
(con seudo codigo me apañaria bien)

Con una condición: ESCRIBID BIEN MI NICK!!!  Grin Grin Grin Grin Grin

Veamos, la idea es tener por separado M el módulo del vector velocidad y A el ángulo en el que se mueve y a partir de ahí calcular VX y VY. M siempre va a ser positivo y A valdrá entre 0 y 2*PI (en radianes).

Las fórmulas para pasar del par módulo, ángulo al par VX, VY serían:

Código:
VX=COS(A)*M
VY=-SIN(A)*M

En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))

Después la idea es que según en qué parte del bate golpee la bola se tendría que variar el ángulo (sin cambiar el módulo) para que haya un cambio de dirección en los rebotes. De esta forma se puede obtener una mayor precisión a la hora de ir moviendo la bola e incrementando la velocidad.

Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima Cheesy

Saludos
--
Sph.
En línea
Jos'b
Karoshi Maniac
****
Mensajes: 262


« Respuesta #26 : 14 de Octubre de 2007, 08:02:22 am »

En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))


Saphh, creo que para un rebote con pared horizontal, bastaría ( A=-A ), y para el rebote con pared vertical, bastaria también ( A=PI-A ), por supuesto sin tocar Vx ni Vy, se trabajaría con ángulos negativos pero no influiría en el resultado. Y luego aplicar directamente las formulas
Vx=M*cos(A) y Vy=M*sin(A). Donde M sería la velocidad real de la pelota.
En línea
SapphiRe_MSX
Visitante
« Respuesta #27 : 14 de Octubre de 2007, 08:45:11 am »

En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))


Saphh, creo que para un rebote con pared horizontal, bastaría ( A=-A ), y para el rebote con pared vertical, bastaria también ( A=PI-A ), por supuesto sin tocar Vx ni Vy, se trabajaría con ángulos negativos pero no influiría en el resultado. Y luego aplicar directamente las formulas
Vx=M*cos(A) y Vy=M*sin(A). Donde M sería la velocidad real de la pelota.


En efecto, son cálculos equivalentes. Yo normalizaba A de forma que siempre esté entre 0 y 2*PI (perfeccionista que es uno). El motivo de hacer el cálculo con VX y VY era por no utilizar las fórmulas de SIN y COS más de lo necesario... aunque sólo va en los rebotes, igual no es mucho cálculo... Probad, yo es que ya pienso en ensamblador y claro... Grin Grin Grin

Lo que no incluí es la fórmula para calcular PI, ahí os va:

Código:
PI=ATN(1)*4

¡¡Se me olvidaba!! Si aumentamos la velocidad de la bola tenemos que asegurarnos de que las paredes son lo suficientemente gruesas como para que no se puedan atravesar. Lo ideal es tener un tope de velocidad (pongamos 4, por ejemplo) y que el grosor de las paredes sea dicho límite.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #28 : 14 de Octubre de 2007, 04:59:30 pm »


Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima


YO ME ANIMO, ME ANIMO!
Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde...
mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa.... Angry
En línea
SapphiRe_MSX
Visitante
« Respuesta #29 : 15 de Octubre de 2007, 12:12:40 pm »


Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima


YO ME ANIMO, ME ANIMO!
Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde...
mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa.... Angry

A las 3 dejé de mirar internet ya que me fui a comer con mis padres... y como no había noticias tuyas a las 7 y pico quedé con un colega... En otra ocasión será...
En línea
Páginas: 1 [2] 3 4 5
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!