Si lo que tъ quieres es que la cбmara estй fija en una posiciуn pero que a la vez te siga, creo que te va a servir esto:
Esto es a modo de prueba. Si te sirve y es lo que quieres, luego lo modificas a tu gusto.
PHP код:
new Float:PCP[3]; // CameraPosition
new Float:PCL[3]; // PlayerCameraLookat
new Float:PCA; // PlayerCameraAngle
new bool:CamState; // Si estбs en modo cбmara
new PlayerTimer; // Id del Timer
stock GetCoordsOnLine3D(Float:startX, Float:startY, Float:startZ, Float:endX, Float:endY, Float:endZ, Float:length, &Float:RX, &Float:RY, &Float:RZ)
{
RX = startX - endX;
RY = startY - endY;
RZ = startZ - endZ;
new Float:sqrt = floatsqroot((RX * RX) + (RY * RY) + (RZ * RZ));
if (sqrt < 0.01)
sqrt = 0.01;
RX = -length * (RX / sqrt) + startX;
RY = -length * (RY / sqrt) + startY;
RZ = -length * (RZ / sqrt) + startZ;
} // GetCoordsOnLine3D
forward FollowPlayer(playerid);
public FollowPlayer(playerid)
{
new Float:PX, Float:PY, Float:PZ;
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, PX, PY, PZ);
GetCoordsOnLine3D(PCP[0], PCP[1], PCP[2], PX, PY, PZ, 5.0, X, Y, Z);
PCL[0] = X;
PCL[1] = Y;
PCL[2] = Z;
SetPlayerCameraLookAt(playerid, PCL[0], PCL[1], PCL[2]);
} // FollowPlayer
Y aсadн un comando para probarlo, si usas otro procesador de comandos adбptalo al mismo.
PHP код:
if(!strcmp("/cam", cmdtext, true, 4))
{
if(CamState)
{
KillTimer(PlayerTimer);
SetCameraBehindPlayer(playerid);
CamState = false;
}
else
{
GetPlayerPos(playerid, PCP[0], PCP[1], PCP[2]);
GetPlayerFacingAngle(playerid, PCA);
PCL[0] = PCP[0];
PCL[1] = PCP[1];
PCL[2] = PCP[2];
PCP[0] = PCP[0] - (5.0 * floatsin(-PCA, degrees));
PCP[1] = PCP[1] - (5.0 * floatcos(-PCA, degrees));
PCP[2] = PCP[2] + 2.0;
SetPlayerCameraPos(playerid, PCP[0], PCP[1], PCP[2]);
SetPlayerCameraLookAt(playerid, PCL[0], PCL[1], PCL[2]);
PlayerTimer = SetTimerEx("FollowPlayer", 70, true, "i", playerid);
CamState = true;
}
return 1;
}
Probalo y luego nos dices si te funcionу.
Saludos.