|
Post by ramon on Dec 18, 2022 17:22:42 GMT
Play this fun solid in your games, you only need to reserve variables A and B during the corresponding event.
EVENT SPRITETYPE7
IF COLLISION PLAYER LET SETTINGB = 1 ELSE IF COLLISION TYPE LET SETTINGB = 2 ELSE LET SETTINGB = 0 ENDIF ENDIF
IF SETTINGB > 0 LET A = X ; SOLID OTHER LET B = X IF B > A SUBTRACT A FROM B LET A = B ; DISTANCIA HORIZONTAL ENDSPRITE LET DIRECTION = LEFT ELSE SUBTRACT B FROM A ENDSPRITE LET DIRECTION = RIGHT ENDIF
LET SETTINGA = A
LET B = Y OTHER LET A = Y IF A > B SUBTRACT B FROM A LET B = A ; DISTANCIA VERTICAL ENDSPRITE LET DIRECTION = UP ELSE SUBTRACT A FROM B ENDSPRITE LET DIRECTION = DOWN ENDIF
IF SETTINGA > B IF DIRECTION = LEFT IF CANGOLEFT SPRITELEFT ELSE OTHER SPRITERIGHT ENDSPRITE ENDIF ELSE IF CANGORIGHT SPRITERIGHT ELSE OTHER SPRITELEFT ENDSPRITE ENDIF ENDIF ELSE IF DIRECTION = DOWN OTHER SUBTRACT 1 TO Y STOPFALL ENDSPRITE ENDIF ENDIF ENDIF
FALL
|
|
|
Post by ghecko71 on Feb 12, 2023 11:12:35 GMT
Greetings, putting the code as it is...everything works great, but only one error, when pushing the box to the left side...it passes the box through the player to the right, as if it were not solid on the right side out of the box and it's driving me crazy, any help?
|
|
|
Post by ramon on Feb 12, 2023 20:46:52 GMT
Well you're right, I had a mistake. Now it is corrected. It distinguishes the horizontal direction (DIRECTION) from the vertical one (SETTINGB)
EVENT SPRITETYPE7
IF COLLISION PLAYER LET SETTINGB = 1 ; COLISIONA CON JUGADOR ELSE IF COLLISION TYPE LET SETTINGB = 2 ; COLISIONA CON ESTE MISMO TIPO (TYPE 7) ELSE LET SETTINGB = 0 ; PARA EL RESTO DE TIPOS ENDIF ENDIF
IF SETTINGB > 0 ; SI COLISIONA CON JUGADOR U OTRO BLOQUE DE ESTE TIPO... LET A = X ; SOLIDO OTHER LET B = X ; EL OTRO TIPO ENDSPRITE IF B > A ; EL OTRO ESTA A LA DERECHA: SUBTRACT A FROM B LET A = B LET DIRECTION = LEFT ; DEBO MOVER EL BLOQUE A LA IZQUIERDA ELSE ; EN CASO CONTRARIO... SUBTRACT B FROM A LET DIRECTION = RIGHT ; DEBO MOVER EL BLOQUE A LA DERECHA ENDIF LET SETTINGA = A ; GUARDA DISTANCIA HORIZONTAL
LET B = Y OTHER LET A = Y ENDSPRITE IF A > B SUBTRACT B FROM A LET B = A ; DISTANCIA VERTICAL LET SETTINGB = UP ; GUARDA DIRECCION VERTICAL ELSE SUBTRACT A FROM B LET SETTINGB = DOWN ; GUARDA DIRECCION VERTICAL ENDIF
IF SETTINGA > B ; DISTANCIA HORIZONAL MAS SIGNIFICATIVA IF DIRECTION = LEFT IF CANGOLEFT SPRITELEFT ELSE OTHER SPRITERIGHT ENDSPRITE ENDIF ELSE IF CANGORIGHT SPRITERIGHT ELSE OTHER SPRITELEFT ENDSPRITE ENDIF ENDIF ELSE ; DISTANCIA VERTICAL MAS SIGNIFICATIVA IF SETTINGB = DOWN ; SI TUBIERA QUE MOVER EL BLOQUE HACIA ABAJO, NO LO HAGO OTHER SUBTRACT 1 TO Y ; EN CAMBIO COLOCO AL OTRO ENCIMA DEL BLOQUE STOPFALL ; Y AL OTRO NO LE DEJO CAER ENDSPRITE ENDIF ENDIF ENDIF
FALL
|
|
|
Post by ghecko71 on Feb 13, 2023 10:42:06 GMT
GRACIAS !!! Eres un crack !
|
|
|
Post by ramon on Feb 17, 2023 11:50:45 GMT
Another version. Discriminate the enemy so that they bounce with the solid instead of displacing it.
EVENT SPRITETYPE7
IF COLLISION PLAYER ; si COLISIONA CON JUGADOR LET SETTINGB = 1 ELSE IF COLLISION TYPE ; si COLISIONA CON ESTE MISMO TIPO (TYPE 7) LET SETTINGB = 2 ELSE IF COLLISION 2 ; si colisiona con mi enemigo (EN MI CASO TYPE 2) LET SETTINGB = 3 ELSE LET SETTINGB = 0 ; PARA EL RESTO DE TIPOS ENDIF ENDIF ENDIF
IF SETTINGB > 0 ; SI COLISIONA CON JUGADOR U OTRO BLOQUE DE ESTE TIPO... LET A = X ; X DEL SOLIDO OTHER LET B = X ; X DEL EL OTRO TIPO ENDSPRITE IF B > A ; EL OTRO ESTA A LA DERECHA: SUBTRACT A FROM B LET A = B LET DIRECTION = LEFT ; DEBO MOVER EL BLOQUE A LA IZQUIERDA ELSE ; EN CASO CONTRARIO... SUBTRACT B FROM A LET DIRECTION = RIGHT ; DEBO MOVER EL BLOQUE A LA DERECHA ENDIF LET SETTINGA = A ; GUARDA DISTANCIA HORIZONTAL
LET B = Y OTHER LET A = Y ENDSPRITE IF A > B SUBTRACT B FROM A LET B = A ; DISTANCIA VERTICAL LET SETTINGB = UP ; GUARDA DIRECCION VERTICAL ELSE SUBTRACT A FROM B LET SETTINGB = DOWN ; GUARDA DIRECCION VERTICAL ENDIF
IF SETTINGA > B ; DISTANCIA HORIZONAL MAS SIGNIFICATIVA OTHER IF TYPE = 2 ; SI EL OTRO ES MI ENEMIGO... IF DIRECTION = LEFT LET DIRECTION = RIGHT ; HAZ QUE REBOTE ELSE LET DIRECTION = LEFT ; HAZ QUE REBOTE ENDIF ELSE ; PARA LOS DEMÁS ENDSPRITE IF DIRECTION = LEFT IF CANGOLEFT SPRITELEFT ; EL BLOQUE SE DESPLAZA ELSE OTHER SPRITERIGHT ; O MANTIENE SU POSICION ENDSPRITE ENDIF ELSE IF CANGORIGHT SPRITERIGHT ELSE OTHER SPRITELEFT ENDSPRITE ENDIF ENDIF ENDIF ELSE ; DISTANCIA VERTICAL MAS SIGNIFICATIVA IF SETTINGB = DOWN ; SI TUBIERA QUE MOVER EL BLOQUE HACIA ABAJO, NO LO HAGO OTHER IF TYPE = 2 ; EN CASO DE MI ENEMIGO HAGO QUE REBOTE IF SETTINGA = UP LET SETTINGA = DOWN ELSE LET SETTINGA = UP SUBTRACT 1 TO Y ENDIF ELSE ; PARA LOS DEMÁS: SUBTRACT 1 TO Y ; COLOCO AL OTRO ENCIMA DEL BLOQUE STOPFALL ; Y AL OTRO NO LE DEJO CAER ENDIF ENDSPRITE ENDIF ENDIF ENDIF
FALL
|
|
|
Post by ghecko71 on Feb 17, 2023 17:56:40 GMT
Muchas gracias Ramon !!!
|
|