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]
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]
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]
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]