Hola a Tohos en la comu, alguien tiene algun buen codigo o script para SUBIR y BAJAR slopes(en un juego de plataformas 2D), he visto varios examples pero, algunos son simplecitos pero tienen ciertas fallas, otros son excelentes pero tienen mucho codigo(muchos scripts) y no entiendo.
¿Alguien ya hizo algun juego de plataformas con slope? Echenme una ayudita... :D
GRACIAS DE ANTEMANO :-[
NOTA: Estoy usando "hspeed" y "vspeed", pero si no hay codigo para este tipo entonces no importa q sea en "x" y "y"
Hola, amigo. aveces es nesesario usar mucho codigo para que las cosas funcionen bien
pero para esto en concreto no hace falta mucho codigo,
con esto te deberia bastar
/*
argument 0 : direccion (1 derecha); (-1 izquierda)
*/
//BajarRampas
if place_free(x+Vel*argument0,y+1) && vspeed=0{
for(i=0;i<=32;i++){
if ! place_free(x+Vel*argument0,y+i){
x+=(Vel)*argument0;
y+=(i-1)
image_xscale=argument0;
if !place_free(x,y+1){
sprite_index=spr_Caminando
image_speed=0.2
}
exit;
}
}
}
//Subir Rampas
for(i=0;i<=32;i++){
if place_free(x+Vel*argument0,y-i){
x+=(Vel)*argument0;
y-=(i)
image_xscale=argument0;
if !place_free(x,y+1){
sprite_index=spr_Caminando
image_speed=0.2
}
exit;
}
}
Evento Step del Personaje
//Derecha
if keyboard_check(global.Derecha) && ! keyboard_check(global.Izquierda) {
Scr_Movimiento(1)
}
//Deteniendo Animacion
if keyboard_check_released(global.Derecha){
image_speed=0;
image_index=1
}
//Izquierda
if keyboard_check(global.Izquierda)&& ! keyboard_check(global.Derecha) {
Scr_Movimiento(-1)
}
//Deteniendo Animacion
if keyboard_check_released(global.Izquierda){
image_speed=0;
image_index=1
}
//Salto
if keyboard_check_pressed(global.Salto) && !place_free(x,y+1){
vspeed=-12;sprite_index=spr_Salto
}
para que te funcione bien, tenes que cambiar las teclas o declarar las variables globales
global.derecha=tecla para la derecha
global.izquierda=tecla para la izquierda
global.Salto= tecla de salto
y porupuesto agregarle la gravedad y los eventos de colicion con el suelo,y las rampas
move_contact_solid(direction,12);vspeed=0;gravity=0;
if sprite_index=spr_Cayendo{sprite_index=spr_Caminando}
Estaba a punto de agregar q uso tambien friction, peroo, ya respondiste :D
Como seria con friction, reemplazaria el if keyboard_check(...) por el if hspeed>0 (porq uso hspeed)???
MOD: Hay un problemita, ahora con el bloque normal(osea, con el q no es slope) no tienes una buena colision, a veces se keda parado, antes de tocar la pared cuadrada. :-X
Cita de: Yoo en Marzo 03, 2015, 02:23:39 AM
Estaba a punto de agregar q uso tambien friction, peroo, ya respondiste :D
Como seria con friction, reemplazaria el if keyboard_check(...) por el if hspeed>0 (porq uso hspeed)???
MOD: Hay un problemita, ahora con el bloque normal(osea, con el q no es slope) no tienes una buena colision, a veces se keda parado, antes de tocar la pared cuadrada. :-X
Mira, para la velocidad yo uso la variable Vel, solo tendrias que cambiar eso, y la colicion que puse sirve para todos los bloques, seguramente no estes usando una misma mascara para todas las animaciones, te sugiero que hagas un sprite que sea un poco mas chico que el sprite inicial del personaje
por ejemplo si el personaje es de 16x16, que la mascara se de 14x14, luego en el objeto en donde dice Mask < same as sprite > justo abajo de Parent, le asignes el sprite de mascara, esto lo que hace es que la mascara siempre sea la misma,
Yo tengo otro.
CREATE
altura=8
velocidad=4
TECLA DERECHA
if !place_free(x,y+1) {j=-altura} else {j=0} ///si esta en el suelo no siga bajando
for (i=j;i<altura;i+=1) ///bucle que ve comprueba la pendiente maxima arriba y abajo
{
if place_free(x+velocidad,y-i) ///comprueba si el lugar esta libre
{
x+=velocidad ///y se mueve hacia ahi
y-=i
break ///termina el bucle
}
}
Cita de: 3dgeminis en Marzo 03, 2015, 03:03:49 AM
Yo tengo otro.
CREATE
altura=8
velocidad=4
TECLA DERECHA
if !place_free(x,y+1) {j=-altura} else {j=0} ///si esta en el suelo no siga bajando
for (i=j;i<altura;i+=1) ///bucle que ve comprueba la pendiente maxima arriba y abajo
{
if place_free(x+velocidad,y-i) ///comprueba si el lugar esta libre
{
x+=velocidad ///y se mueve hacia ahi
y-=i
break ///termina el bucle
}
}
¿y con esto se te limita la altura de la rampa, o puedes subir todo lo que quieras?
Proba cambiando el valor altura. No es perfecto pero anda
Escontré un example excelente, pero estaba en ingles :-X
Asi q lo traduci al español, y la verdad está muy bien explicado,
Lo pongo aca para akellos q kieren slopes :D
NOTA: el example incluye slopes y doble salto XD
:-[ EL EXAMPLE NO ES MIO, SOLO TRADUCIDO POR MI :-[