Hallo,
ich arbeite gerade an einer Egoperspektiven-Sicht (die ich sobald sie passt veröffentliche). Und bei dieser sicht wird die kamera immer auf einen Punkt gesezt. Mein Problem: ich will machen, dass man mit der Maus immernoch nach rechts, links, oben oder nach unten kann und dann halt die Sicht auch dem entsprechen nach rechts, links, oben oder nach unten geht. Kann man das machen?
Ich hoffe ihr versteht was ich meine
Abfragen, ob man Maus nach links, rechts, oben oder unten "gezogen" wird und dann dementsprechend die Sicht ändern?
- Tom Sunder
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Beitrag von Jeffry ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
Ich habe mal eine First Person Include geschrieben und dort wird die Kamera an ein Objekt geheftet, das man sie noch drehen kann, aber an einem Punkt bleibt.
http://wiki.sa-mp.com/wiki/AttachCameraToObject -
Auf Anfrage in PN:
Die Bewegung der Maus ist leider nicht per Code zu erkennen. Du müsstest das über die Tasten (zum Beispiel die Pfeiltasten) machen.
kann man machen, dass jede Sekunde wo q oder e gedrückt wird die sicht etwas nach links oder rechts gedreht wird? Darum kann man das einfach mit keystatechange machen und dann jedes mal um 1 drehen lassen ohne, dass man dauernd neu drücken muss? -
Bei OnPlayerUpdate zum Beispiel, mit: http://wiki.sa-mp.com/wiki/GetPlayerKeys
Oder eben in einem Timer.Du kannst dir ruhig auch mal den Ansatz von SylpheedW anschauen, das klingt interessant, falls es das erfüllt was du haben willst.
EDIT:
Oder im Post drunter das Beispiel! -
Die Bewegung der Maus ist leider nicht per Code zu erkennen. Du müsstest das über die Tasten (zum Beispiel die Pfeiltasten) machen.
Ich muss dich korrigieren, Jeffry, es ist möglich (wenn auch kompliziert).In der Theorie funktioniert das folgendermaßen:
Du setzt die Kamera hinter den Spieler und nach 5ms kannst du mit GetPlayerCameraFrontVector, GetPlayerCameraPos und GetPlayerPos
berechnen, in welche Richtung der Spieler die Maus bewegt hat. Nachdem du das 1x berechnet hast, musst du die Kamera wieder zurücksetzen.
Quelle -
Ich muss dich korrigieren, Jeffry, es ist möglich (wenn auch kompliziert).
Danke! Das so zu machen klingt interessant, wusste ich gar nicht. Man lernt nie aus.Ich werde das bei Gelegenheit mal selbst ausprobieren, wer weiß was sich damit noch alles anstellen lässt, wenn das klappt.
Danke für den Hinweis und den Link. -
Quelle
Ist das dadrin gleich enthalten oder muss ich das umscripten? Weil gerade werde ich daraus net sehr schlau -
Code-Schnipsel aus einem Skript:
AttachObjectToPlayer(Player[playerid][CameraOBJ] = CreateObject(19300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),playerid, 0.0, 0.12, 0.7, 0.0, 0.0, 0.0);
AttachCameraToObject(playerid, Player[playerid][CameraOBJ]);
Offset ist noch nicht richtig, kannste aber mal testen. -
AttachObjectToPlayer(Player[playerid][CameraOBJ] = CreateObject(19300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),playerid, 0.0, 0.12, 0.7, 0.0, 0.0, 0.0); AttachCameraToObject(playerid, Player[playerid][CameraOBJ]);
da ist die camera dann ganz normal
Mein Code:
public OnPlayerUpdate(playerid)
{
if(egoperspektive[playerid] == 1)
{
new Float:usX, Float:usY, Float:usZ, COBJ[MAX_PLAYERS];
GetPosVorSpieler(playerid, 0.5, usX, usY, usZ);
SetPlayerCameraPos(playerid, usX, usY, usZ+0.4);
AttachObjectToPlayer(COBJ[playerid] = CreateObject(19300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),playerid, 0.0, 0.12, 0.7, 0.0, 0.0, 0.0);
AttachCameraToObject(playerid, COBJ[playerid]);
}
return 1;
}stock GetPosVorSpieler(playerid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
{
if(IsPlayerConnected(playerid))
{
new Float:a;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
else GetPlayerFacingAngle(playerid, a);
GetPlayerPos(playerid, x, y, z);
x += (dist * floatsin(-a, degrees));
y += (dist * floatcos(-a, degrees));
return true;
}
return false;
} -
Dass muss nur einmal aktiviert werden.
-
Dass muss nur einmal aktiviert werden.
oh ok
soll ich dann nur das reintun was du geschrieben hast oder auch das was ich geschrieben hab? -
oh ok
soll ich dann nur das reintun was du geschrieben hast oder auch das was ich geschrieben hab?
Nur meins.Also bei mir geht es.
-
Code-Schnipsel aus einem Skript:
AttachObjectToPlayer(Player[playerid][CameraOBJ] = CreateObject(19300, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),playerid, 0.0, 0.12, 0.7, 0.0, 0.0, 0.0);
AttachCameraToObject(playerid, Player[playerid][CameraOBJ]);
Offset ist noch nicht richtig, kannste aber mal testen.
Das bringt nur rein gar nichts, wenn ducken und die verschiedenen Waffen nicht berücksichtigt werden. Den Offset muss man bei jeder Aktion, ich meine nicht OnPlayerUpdate, anpassen, ansonsten wird das echt unschön -
Nur meins.Also bei mir geht es.
Geil danke funkt -
Trotz dass das Thema schon erledigt ist möchte ich noch kurz auf die zwei Ansätze eingehen.
Ich habe mir den Link von Pille: mit dem Code von Y_Less angeschaut und getestet. Das ganze ist, wie Y_less dort schon geschrieben hat ziemlich ungenau und auch nicht direkt das was Tom braucht. In dem Code geht es eher darum, die Mausbewegung zu berechnen und, zum Beispiel, ein Textdraw anhand der Mausbewegung zu bewegen. Das ist ein sehr interessanter Ansatz, daraus kann man bestimmt mal was machen, allerdings ist es hierfür nicht passend.
Wenn man sich das ganze aber als eine Art Menü vorstellt, bei dem man den Spieler nicht sieht, (Bildschirm zum Beispiel schwarz) dann könnte man daraus möglicherweise mit viel Aufwand eine Art anklickbare Textdraws System machen, welches wesentlich flexibler ist, als das eingebaute. Nur so ein Gedankengang... aber der Code gefällt mir. Vielleicht ist ja mal jemandem langweilig und er/sie macht was draus.Was SylpheedW: gepostet hat ist einfach genial. Auf die Idee muss man erst mal kommen. Zwei Zeilen und es macht genau das was es soll. Ich sollte mich mal mehr mit den neuen Funktionen beschäftigen, mit denen lässt sich bestimmt so einiges machen. Danke fürs teilen!
-
breadfish.de
Hat das Thema geschlossen.