SetPlayerCameraLookAt(playerid, x, y, z, rotx, roty, rotz); ?
Du löst das durch 2 Funktionen:
[wiki]SetPlayerCameraPos[/wiki]
[wiki]SetPlayerCameraLookAt[/wiki]
SetPlayerCameraLookAt(playerid, x, y, z, rotx, roty, rotz); ?
Du löst das durch 2 Funktionen:
[wiki]SetPlayerCameraPos[/wiki]
[wiki]SetPlayerCameraLookAt[/wiki]
Diese Funktionen benutze ich bereits.
Soll ich anstatt den X Y Z Koords RotX, RotY, RotZ einfügen oder wie und wenn in welche Funktion von den beiden.
Kleines Beispiel:
Ich möchte die CameraPos haben wo die Kamera hinschaut, Bild.
Aber letztendlich passiert das, Bild.
Die RotX Koord der Kamera ist leicht verändert, gibt es irgendeine Möglichkeit womit ich mit SetPlayerCameraPos() oder SetPlayerCameraLookAt() auch die Rots setzen kann?
Mit der Funktion SetPlayerCameraPos positionierst du die Kamera an den Koordinaten.
Dann mit der LookAt Funktion, gibst du quasi die Koordinaten an, wohin die Kamera schauen soll...die Rotation wird dabei automatisch justiert
Also ich hab es momentan so:
SetPlayerCameraPos(playerid, Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z]);
SetPlayerCameraLookAt(playerid, Kamera[i][k_RotX], Kamera[i][k_RotY], Kamera[i][k_RotZ]);
Und die PlayerCamera wird wieder so gesetzt, wie im Bild von meinem Beitrag zuvor.
Gibt es eine Funktion ungefähr so: SetPlayerCameraLookAt(playerid, x, y, z, rotx, roty, rotz); ?
Nein leider nicht aber ich hab dir die kleine Funktion kurz geschrieben
stock SetPlayerCameraLookAtEx(playerid, Float:X, Float:Y, Float:Z, Float:RotX, Float:RotY) {
SetPlayerCameraPos(playerid, X, Y, Z);
X += 10.0 * floatcos(RotX, degrees) * floatcos(RotY, degrees);
Y += 10.0 * floatcos(RotX, degrees) * floatsin(RotY, degrees);
Z += 10.0 * floatsin(RotX, degrees);
SetPlayerCameraLookAt(playerid, X, Y, Z);
return 1;
}
Und die PlayerCamera wird wieder so gesetzt, wie im Bild von meinem Beitrag zuvor.
Du könntest es berechnen lassen:
new Float:x=Kamera[i][k_X], Float:y=Kamera[i][k_Y],Float:z=Kamera[i][k_Z],Float:a=Kamera[i][k_RotZ];
x += 5.0 * floatsin(-a, degrees);
y += 5.0 * floatcos(-a,degrees);
SetPlayerCameraLookAt(playerid,x,y,z-1.0);
Vielen Dank für dein Code Prototype, ich habe es getestet, aber es verändert sich leider nichts!
Bei dir Kaliber da bist du mit der Berechnung schon auf dem richtigen Weg, fast.
Hier zur Vereinfachung habe ich dir mal zwei Screenshots gemacht, vielleicht kannst du damit deine Berechnung korrigieren.
Aber trotzdem vielen Dank erstmal!
Dürfte ich dich Fragen wie du meinen Codeschnipsel verwendest und kannst du den Code dazu posten ?
Poste einfach mal wie du Die Camera erstellst und deine
SetPlayerCameraLookAt
und so so wie du es jetzte hast
SetPlayerCameraLookAtEx(playerid, Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z], Kamera[i][k_RotX], Kamera[i][k_RotY]);
printf("X: %f | Y: %f | Z: %f | RotX: %f | RotY: %f", Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z], Kamera[i][k_RotX], Kamera[i][k_RotY]);
X: -2653.365478 | Y: 696.096252 | Z: 29.902885 | RotX: 13.699999 | RotY: 0.000000
Wie erstellst du die Camera ?
Das Problem bei Objekten ist das ihre Rotation anders ausgerichtet ist ich hab das ganze nochmal probiert und hab dir den Code mit dem ich das kurz getestet habe geschrieben
new Float:Rot[2],
obj,
done;
CMD->test(playerid,params[]){
SetPlayerCameraLookAtEx(playerid,20.0,20.0,10.0,-Rot[0],Rot[1] - 90);
return 1;
}
CMD->back(playerid,params[]){
SetCameraBehindPlayer(playerid);
return 1;
}
CMD->set(playerid,params[]){
if(!done)done = 1;
else done = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(!done)return 1;
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(ud == KEY_UP) {
Rot[0] += 5.0;
}
else if(ud == KEY_DOWN){
Rot[0] -= 5.0;
}
if(lr == KEY_LEFT){
Rot[1] += 5.0;
}
else if(lr == KEY_RIGHT){
Rot[1] -= 5.0;
}
SetObjectRot(obj,Rot[0], 0.0,Rot[1]);
SetPlayerCameraLookAtEx(playerid,20.0,20.0,10.0,-Rot[0],Rot[1] - 90);
return 1;
}
stock SetPlayerCameraLookAtEx(playerid, Float:X, Float:Y, Float:Z, Float:RotX, Float:RotY) {
SetPlayerCameraPos(playerid, X, Y, Z);
X += 10.0 * floatcos(RotX, degrees) * floatcos(RotY, degrees);
Y += 10.0 * floatcos(RotX, degrees) * floatsin(RotY, degrees);
Z += 10.0 * floatsin(RotX, degrees);
SetPlayerCameraLookAt(playerid, X, Y, Z);
return 1;
}
public OnGameModeInit()
{
obj = CreateObject(1886,20.0,20.0,10.0,0.0,0.0,0.0);
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 20.0,20.0,5.0, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
Alles anzeigen
1 warning: number of arguments does not match definition
makierter bereich:
public OnVehicleDeath(vehicleid, killerid)
{
SetVehicleParamsForPlayer(vehicleid,0,0); // Damit Spawnt das Fahrzeug wieder offen für alle.
return 1;
}
Schau doch ins wiki
Das native sieht so aus und jetzt vergleichst du deine Parameter (vehicleid,0,0) mit die der Funktion (vehicleid, playerid, objective, doorslocked)
siehe dazu auch den wiki eintrag
danke einen moment lang wollte ich sagen ich check es net aber dann ging es also zumindest so das ich keine fehler mehr habe. Ich habe hinter 0,0 noch eine 0 dran gesetzt wegen unlock und schon gings hoffentlich ist es jetzt richtig
Habe dein Code jetzt ausprobiert.
Dort funktioniert es bei mir auch einwandfrei.
Aber sobald ich deine Funktion bei mir teste, wird mir die PlayerCamera nicht so gesetzt, wie die Kamera ( das Objekt ) zeigt.
Hatte es auch so probiert
SetPlayerCameraLookAtEx(playerid, Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z], -Kamera[i][k_RotX], Kamera[i][k_Y]-90);
Und nun?
Edit: mein filterscript erkennt user nicht als eingeloggt, was kann ich dagegen tun damit mein filterscript alle user als eingeloggt/registriet sieht. (wenn ich anti_spawn ausschalte spawn ich zwar aber kann meine befehle nicht benutzen da ich die meldung kriege du musst dich erst einloggen oder registrieren.
Brauche ein System oder so damit mein server mich als eingeloggt sieht.
filterscript: http://pastebin.com/SySiRYn8
hast du mir damals gezeigt @Jeffry
kann mir bitte jemand helfen ???
@Kaliber vlt du ?
Ich würde eher die Z - Rotation nutzen und du hast due Koordinate Kamera[i][k_Y] genutzt
SetPlayerCameraLookAtEx(playerid, Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z], -Kamera[i][k_RotX], Kamera[i][k_RotZ]-90);
Ich würde eher die Z - Rotation nutzen und du hast due Koordinate Kamera[i][k_Y] genutzt
SetPlayerCameraLookAtEx(playerid, Kamera[i][k_X], Kamera[i][k_Y], Kamera[i][k_Z], -Kamera[i][k_RotX], Kamera[i][k_RotZ]-90);
Oh so simple?
Hatte gedacht man muss die Y Rot nehmen, da du in deiner Funktion selbst Y Rot hattest.
stock SetPlayerCameraLookAtEx(playerid, Float:X, Float:Y, Float:Z, Float:RotX, Float:RotY)
Naja nun funktioniert es einwandfrei, Vielen Dank!
Außerdem nochmal danke an Kaliber, dafür das du mir Hilfe per Ts geboten hast.