msx dummie
|
|
« 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
|
|
« 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
|
|
|
En línea
|
|
|
|
msx dummie
|
|
« 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)
|
|
|
En línea
|
|
|
|
msx dummie
|
|
« 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? ?? no tengo aqui ningun emulador funcionando para probarlo... y lo quiero saber. poooooorrrr faaaavoooooorrr!!!! :god:
|
|
|
En línea
|
|
|
|
msx dummie
|
|
« 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
|
|
« 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
|
|
« 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 (con seudo codigo me apañaria bien)
|
|
|
En línea
|
|
|
|
msx dummie
|
|
« 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 (con seudo codigo me apañaria bien) Con una condición: ESCRIBID BIEN MI NICK!!! 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: 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 Saludos -- Sph.
|
|
|
En línea
|
|
|
|
Jos'b
|
|
« 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... Lo que no incluí es la fórmula para calcular PI, ahí os va: 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
|
|
« 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 animaYO ME ANIMO, ME ANIMO! Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde... mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa....
|
|
|
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 animaYO ME ANIMO, ME ANIMO! Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde... mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa.... 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
|
|
|
|
|