Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: msxnake en 31 de Diciembre de 2005, 07:58:26 pm



Título: Un Salto decente
Publicado por: msxnake en 31 de Diciembre de 2005, 07:58:26 pm
 ???
En el Jack Exploring2 me estoy currando un salto en parabola pixel  a pixel, mi problema es la deteccion de bordes.

Alguna idea?

 @@activa_saltesquerre:
        ld a,[anterior]
        cp 7
        jr z,@@cont2
        cp 77
        ret nz
       
        @@cont2:
        ld a,[pulsa]
        or a
        jp nz,move
       
        @@saltesquerre:
        ld a,2
        ld b,4
        ld c,12*5
        call SET_SOUND
       
        ld a,1
        ld [pulsa],a
        ld de,0
        ld [index_s],de
        ld a,2
        ld [salta],a
        ld de,(foto*2)+8
        ld [foto_jack],de
        ret
       
        @@saltesquerre2:
        ld de,[index_s]
        ld hl,vectorsalt
        add hl,de
        ld a,[hl]
        ld [sincro],a
        inc de
        ld [index_s],de
        cp final
        jr z,@@final
        ld hl,vectory
        dec de ;si no s'incrementa abans. problema??
        add hl,de
        ld a,[hl]
        cp 1
        call z,ascens
        cp 2
        call z,descens
        call endarrere
        ret
       
        @@final:
        ld a,2
        ld b,1
        ld c,(12*5)+3
        call SET_SOUND
       
        xor a
        ld [salta],a
        ret     


Título: Re: Un Salto decente
Publicado por: Darth_Fistro en 31 de Diciembre de 2005, 10:57:12 pm
Hola, MSXnake  :D

Estoy yo ahora de alcohol como pa ponerme a examinar el código, pero resumiendo, yo lo que hago es detectar siempre choques con los objetos. Una bandera controla el salto, que se llama con un call si está activada, y si se choca con algo y se salta al mismo tiempo, pues se desactiva el salto y se activa la rutina de "caída libre" (que no hay suelo bajo los pies, vamos). Por eso no veo que tengas necesidad de incluir rutinas de detección DENTRO de tu rutina de salto.

Igual lo que has preguntado no tiene nada que ver con lo que he respondido, jajaja  ;D A ver si mañana más fresco me entero un poco mejor. Anyway, ánimo con el Jack (disfruto como un enano con el original, ¡qué de recuerdos de los tiempos de la msx-club!)  :D

¡Saludos y feliz 2006!  ;)


Título: Re: Un Salto decente
Publicado por: MsxKun en 01 de Enero de 2006, 01:58:11 am
Buenas,

Lo que yo haria es mirar que caracter "pisa" el personaje. A partir de la posicion X e Y del sprite del personaje calculariamos el caracter de la tabla de nombres que corresponde a esa posicion, (o su equivalente en RAM si tienes el mapa en RAM antes de volcarlo -mas mejor-) y comprobaria si corresponde a un caracter de fondo o no. Si no es de fondo, seria pared, o techo o algo y por lo tanto ya tienes detectado el susodicho. Pero claro, la resolucion es de un caracter, lo cual para SC2 ya es lo suyo.
Como seguramente el caracter sea de 16x16 deberias leer 4 caracteres de la tabla de nombres ( o de RAM), pero en ASM es rapido.
Todo depende de hasta que punto quieras detectar y tal, pero basicamente es eso. Para tener mas precision, pues hay varias croquetas, pero variara segun tengas diseñado el cotarro.

Joe, que mal me explico siempre :) Y si encima tengo 2 copas de cava y una de sidra como hoy, pos ya ves... Si sigues necesitando mas informacion hazlo saber y tranquilo que saldra.  :)


Título: Re: Un Salto decente
Publicado por: pitpan en 01 de Enero de 2006, 06:58:34 pm
Si los bloques escénicos son de 8x8 y completos, bastará que analices la colisión cuando Y MOD 8=0 o X MOD 8=0. Se gana en velocidad y en tranquilidad para el programador. La demo de plataformas que puse usaba esta técnica y no funcionaba mal. A ver si se puede hacer algo en este sentido...


Título: Re: Un Salto decente
Publicado por: jltursan en 01 de Enero de 2006, 07:55:49 pm
Coincido con Robsy. En cualquier caso, ¿detección de que borde?, ¿toparte con algo cuando estás saltando o saber si cuando has acabado el salto estás sobre tierra firme?.
Entiendo que si durante el salto parabólico quieres detectar colisiones, tendrás forzosamente que incluir código para ir viendo sobre que caracteres se encuentra Jack y si detectas uno sólido; pues se acabó el salto y caes en picado (por ejemplo). Si no va a haber colisiones, digo yo que el salto lo tendrás definido en una tabla (para empezar es lo más fácil); así que probablemente sólo tendrás que chequear a los pies de Jack cuando este se encuentre bajando (si lo detectas cuando subes lo incrustarías en las paredes  ;D) y únicamente cuando dice Robsy, en las Y múltiplos de 8, cuando detectas sólido, se acabó el salto.
Y luego vendrán los ajustes y la depuración, claro.