Abfragen, ob man Maus nach links, rechts, oben oder unten "gezogen" wird und dann dementsprechend die Sicht ändern?

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

    Einmal editiert, zuletzt von Tom Sunder ()

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • 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?

  • 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. :guckb:


    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. :good:

  • 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;
    }

  • 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 :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • 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! :thumbup: