Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: como hacer tirolesas rieles lianas estilo konami? [Solucionado]  (Leído 425 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jeffrey Faper

Pues como dice el titulo alguien sabe como puedo hacer ese tipo de acciones usadas muy frecuentemente en juegos de konami.
ya tengo rampas de techo con objetos solidos y funcionan bien,  pero la verdad  no se como implementarlo con objetos a los cuales puedo atravesar desde cualquier lado les dejo  un ejemplo para que se de una mejor idea sobre lo que estoy hablando...


« Última modificación: Mayo 21, 2022, 06:21:53 pm por Jeffrey Faper »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado somnus

Respuesta #1 en: Mayo 18, 2022, 05:42:55 pm

puedes checar colision cono mascara de colision del objeto que te vas a colgar y tu sprite, primero hazlo estatico, si estas dentro de la colision y presionas arriba o flecha arriba entonces activas una variable
colgar= true; donde el sprite cambie a estar colgado y obviamente no te vas a poder mover hacia derecha o izq ( tendras que limitar el movimiento ).

ya que te funcione le puedes agregar el movimiento y ya aqui le vas a aplicar la misma logica a una plataforma que se mueve, es decir, el personaje se debera mover a la misma velocidad que se mueve el objeto de donde estas colgado.

eso fue lo que implemente ya en un prototipo que hice hace tiempo para colgarme, puedes verlo en el segundo 0:32

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 
Los siguientes usuarios dieron las gracias a este tema: Jeffrey Faper


Desconectado Jeffrey Faper

Respuesta #2 en: Mayo 21, 2022, 06:31:45 pm
 El error fue que estaba comprobando mal la colision en el scrMotion
lo estaba haciendo asi: (vspd>=0 && !place_meeting(x,y,zipline)  &&  place_meeting(x,y+sign(vspd),zipline)
cuando la forma correcta era esta: (vspd>=0 && !place_meeting(x,y,zipline) && place_meeting(x,y-1,zipline)
He limpiado un poco el codigo aqui le dejo los scripts corregidos o el projecto.

contra3 ejemplo.gmx: https://drive.google.com/file/d/1WXXyTdO_M8gpTig6J6d9JsXom7KkZa7X/view?usp=sharing

scrMotion:
Spoiler
repeat(ceil(abs(hspd))){
    if(onGround){
        /*************************
       //SOLID_SLOPES_COLLISION//
       /************************/
        var cBlock=place_meeting(x+sign(hspd),y,parSolid);
        if(cBlock){
            //SOLID SLOPE UPWARD
            for(var i=0; i<5; i++;){
                if(!place_meeting(x+sign(hspd),y-i,parSolid)){              
                    y-=i;
                    break;
                }
            }
        }else{
            //SOLID SLOPE DOWNWARD
            for(var i=5; i>0; i--;){
                if(!place_meeting(x+sign(hspd),y+i,parSolid)){
                    if(place_meeting(x+sign(hspd),y+i+1,parSolid)){
                        y+=i;
                        break;
                    }
                }
            }
        }
        /*************************/
        //ONEWAY_SLOPES_COLLISION//
        /*************************/
        var cOneway=place_meeting(x+sign(hspd),y,parOneway) && !place_meeting(x,y+1,parSolid);
        if(place_meeting(x,y+1,otherBlock) && keyUp) || (!place_meeting(x,y+1,otherBlock)){
            if(cOneway){
                //ONEWAY SLOPE UPWARD
                for(var i=0; i<5; i++;){
                    if(!place_meeting(x+sign(hspd),y-i,parOneway)){              
                        y-=i;
                        break;
                    }
                }
            }else{
                //ONEWAY SLOPE DOWNWARD
                for(var i=5; i>0; i--;){
                    if(!place_meeting(x+sign(hspd),y+i,parOneway)){
                        if(place_meeting(x+sign(hspd),y+i+1,parOneway)){
                            y+=i;
                            break;
                        }
                    }
                }
            }
        }
    }
    /********************************/
    //CEILING_SOLID_SLOPES_COLLISION//
    /********************************/
    if(onCeils){
        var cCeils=place_meeting(x+sign(hspd),y,parSolid);
        if(cCeils){
            //CEILING SLOPE UPWARD
            for(var i=0; i<5; i++;){
                if(!place_meeting(x+sign(hspd),y+i,parSolid)){
                    y+=i;
                    break;
                }
            }
        }else{
            //CEILING SLOPE DOWNWARD
            for(var i=5; i>0; i--;){
                if(!place_meeting(x+sign(hspd),y-i,parSolid)){
                    if(place_meeting(x+sign(hspd),y-i-1,parSolid)){
                        y-=i;
                        break;
                    }
                }
            }
        }
    }
    /**************************/
    //ZIPLINE_SLOPES_COLLISION//
    /**************************/
    if(onZipline){
        var cZipline=place_meeting(x+sign(hspd),y,zipline) && !place_meeting(x,y+1,parOneway);
        if(cZipline){
            //ZIPLINE SLOPE UPWARD
            for(var i=0; i<5; i++;){
                if(!place_meeting(x+sign(hspd),y+i,zipline)){
                    y+=i;
                    break;
                }
            }
        }else{
            //ZIPLINE SLOPE DOWNWARD
            for(var i=5; i>0; i--;){
                if(!place_meeting(x+sign(hspd),y-i,zipline)){
                    if(place_meeting(x+sign(hspd),y-i-1,zipline)){
                        y-=i;
                        break;
                    }
                }
            }
        }
    }
    /************************/
    //SIDES_SOLID_COLLISIONS//
    /************************/
    if(!place_meeting(x+sign(hspd),y,parSolid)){
        x+=sign(hspd)
    }else{
        hspd=0;
        break;
    }
}

repeat(ceil(abs(vspd))){
    if(place_meeting(x,y+sign(vspd),parSolid))
    ||(place_meeting(x,y+sign(vspd),otherBlock))
    ||(vspd>=0 && !place_meeting(x,y,zipline) && place_meeting(x,y-1,zipline))
    ||(vspd>=0 && !place_meeting(x,y,parOneway) && place_meeting(x,y+sign(vspd),parOneway)){
        vspd=0;
        break;
    }else{
        y+=sign(vspd);
    }
}

scrGrounded:
Spoiler
var cGround=(place_meeting(x,y+1,parSolid)
|| place_meeting(x,y-1,parSolid)
|| place_meeting(x,y+1,otherBlock)
|| place_meeting(x-1,y,wallBlock) && onWall
|| place_meeting(x+1,y,wallBlock) && onWall
|| !place_meeting(x,y,zipline) && place_meeting(x,y-1,zipline)
|| vspd>=0 && !place_meeting(x,y,parOneway) && place_meeting(x,y+1,parOneway));
return cGround;

EVENTO STEP JUGADOR:
Spoiler
/*
ACTIVAR_ZIPLINE....COMO DIJO SOMNUS COMPROBAMOS SI ESTAMOS EN UN RIEL O ZIPLINE CON UNA BOLEANA YO LA LLAME onZipline
TAMBIEN NOS AYUDARA PARA CONTROLAR LAS ANIMACIONES  DEL PERSONAJE
*/
if(!place_meeting(x,y,zipline) && place_meeting(x,y-1,zipline) && !onZipline){
    onZipline=1;
    }
//COLGADO_EN_UN_ZIPLINE
if(onZipline){
     if(onWall || onCeils || !place_meeting(x,y-1,zipline) || place_meeting(x,y,zipline)){
        onZipline=false;
     }
}

« Última modificación: Mayo 21, 2022, 06:34:52 pm por Jeffrey Faper »