Enero 03, 2022, 01:28:06 AM Ultima modificación: Enero 06, 2022, 09:45:21 PM por Ikaro3d
Hola que tal, ya estoy otra vez por a qui , para los mas avilés, tengo  mi nave player anclada en la room y todo correcto , pero ahora  he puesto una cámara [ 0 ] y no se me ocurre como anclarla para que no se salega de la view

ue
[gml]   
xx =  clamp(x, 150, 2380)
  yy =clamp(y, 180, 1300)



xx += (keyboard_check(ord("D"))  -keyboard_check(ord("A")) ) *v;

  x=lerp(x,xx,0.16);

  yy += (keyboard_check(ord("S"))  -keyboard_check(ord("W"))) *v;

  y=lerp(y,yy,0.16)  [/gml]

#1 Enero 03, 2022, 02:55:13 AM Ultima modificación: Enero 03, 2022, 05:29:08 AM por Jeffrey Faper
Bueno yo lo hago de esta manera, no se si sea la forma mas eficiente de hacerlo, pero , hasta la fecha me sigue funcionado incluso si se usan velocidades de movimiento muy altas,  el jugador permanece dentro de la view y ademas el jugador no se ralentiza  cuando esta en los limites y se ejecuta un movimiento en diagonal
ACLARACION!!
No se si le funcionara ,  ya que yo jamas necesite mover la camara , pues  este codigo  lo usaba para shoters verticales y tanto el mapa como enemigos los generaba por tiempo aun asi yo creo que si deberia de funcionar eso espero
[gml]
//EVENTO CREATE JUGADOR:
movVer  = 0;
movHor  = 0;
hspd    = 0;
vspd    = 0;
halveMov  = 0;
spd  = 25;  //opcional

//EVENTO STEP JUGADOR:
     //SET PLAYER CONTROL
    var Up      = keyboard_check(global.keyU)             || gamepad_button_check(global.gpd,global.padUp)    || gamepad_axis_value(global.gpd,global.axisY)<-0.4;               
    var Left    = keyboard_check(global.keyL)             || gamepad_button_check(global.gpd,global.padLeft)  || gamepad_axis_value(global.gpd,global.axisX)<-0.4;               
    var Down    = keyboard_check(global.keyD)             || gamepad_button_check(global.gpd,global.padDown)  || gamepad_axis_value(global.gpd,global.axisY)> 0.4;               
    var Right   = keyboard_check(global.keyR)             || gamepad_button_check(global.gpd,global.padRight) || gamepad_axis_value(global.gpd,global.axisX)> 0.4;               
    var shoting = keyboard_check(global.keyShot)          || gamepad_button_check(global.gpd,global.padShot);   
    var bombing = keyboard_check_pressed(global.keyBomb)  || gamepad_button_check_pressed(global.gpd,global.padBomb);
    var speedup = keyboard_check_pressed(global.keySpeed) || gamepad_button_check_pressed(global.gpd,global.padSpeed);
   

     //MOVIMIENTO VERTICAL
     if(Up && !Down){
        movVer =-1;
        }
else if(Down && !Up){
        movVer = 1; 
        }
   else{movVer = 0;}       
     
     //MOVIMIENTO HORIZONTAL
     if(Left && !Right){
        movHor =-1;
        }
else if(Right && !Left){
        movHor = 1;
        }
   else{movHor = 0;}
     //LIMITAR VELOCIDAD DIAGONAL OPCIONAL 
     if(movHor!=0 && movVer!=0) && (hspd!=0 && vspd!=0){
        halveMov = sqrt(2);  //SI NO SE LIMITA , SU NAVE SE MOVERA EL DOBLE DE RAPIDO, POR LO TANTO TENDRA MENOS CONTROL SOBRE ELLA
        }
   else{halveMov = 1;}   
   
        hspd = (spd*movHor/halveMov);  // velocidad*direccion(0,180)/limitador de velocidad diagonal
        vspd = (spd*movVer/halveMov);   // velocidad*direccion(90,270)/limitador de velocidad diagonal   
     
     //VIEW LIMITE HORIZONTAL
     repeat(abs(hspd)){
     if(x+sign(hspd)<=view_xview[0]+"ANCHO DE SU SPRITE" && (movHor=-1))
     ||(x+sign(hspd)>=view_wview[0]-"ANCHO DE SU SPRITE" && (movHor= 1)){
        hspd = 0;
        }
   else{x += sign(hspd)*dTime;}
   }
      //VIEW LIMITE VERTICAL
     repeat(abs(vspd)){
     if(y+sign(vspd)<=view_yview[0]+"ALTURA DE SU SPRITE" && (movVer=-1))
     ||(y+sign(vspd)>=view_hview[0] -"ALTURA DE SU SPRITE"  && (movVer= 1)){
        vspd = 0;
        } 
   else{y += sign(vspd)*dTime;}
   }
   //AÑADIR VELOCIDAD DE LA VIEW A JUGADOR, ESTO ES OPCIONAL DEPENDERA DEL TIPO DE NIVEL
   x += "viewHorizontalSpeed";
   y += "viewVerticalSpeed";
[/gml]

#2 Enero 03, 2022, 04:02:51 AM Ultima modificación: Enero 03, 2022, 05:24:52 AM por Jeffrey Faper
si no le funciona  aqui le dejo un ejemplo de como usar clamp, lo siento Game Maker elimino view_xview y view_wview que eran variables muy eficientes la verdad,  creo que las sustituyo por  camera_get_view_x(camera) y camera_get_view_width(camera) entonces para clampear el jugador a la view seria algo asi, no lo se
[gml]
   //EVENTO STEP JUGADOR:
   //clamp x,y del jugador a la camara
    x = clamp(x ,camera_get_view_x(camera)+32 ,camera_get_view_x(camera)+camera_get_view_width(camera)-32);
    y = clamp(y ,camera_get_view_y(camera)+32 ,camera_get_view_y(camera)+camera_get_view_height(camera)-32);
   
   //SUMAR VELOCIDAD DE LA CAMARA A POSICION DEL JUGADOR 
   x += "camaraVelocidadHorizontal"; //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  HORIZONTAL RESPECTO A LA VIEW
   y += "camaraVelocidadVertical";  //SI EL JUGADOR DEJA DE MOVERSE ESTE MANTENDRA SU POSICION  VERTICAL RESPECTO A LA VIEW
                                                             

[/gml]

#3 Enero 03, 2022, 11:55:43 PM Ultima modificación: Enero 04, 2022, 12:06:20 AM por Ikaro3d
Gracias por toda esea info ,lo tengo ya lo solucione  cuando tenga mi juego te regalo una key  :P

[gml]

var posx= camera_get_view_x(view_camera[0] ) 
var posy= camera_get_view_y(view_camera[0] )

[/gml]