3D- FPS Stueuerung mit Maus: Theorie und umsetzung?

  • 3D- FPS Stueuerung mit Maus: Theorie und umsetzung?

    Also, ich habe da einige Fragen in Punkte 3D des Game Makers.

    Ich versuche mich nun den 3D Funktionen zu widmen. Wie am Anfang bei meiner Game Maker Zeit, habe ich Tuts runtergeladen und versucht die Examples zu verändern. So habe ich stück für Stück erfahren wwas für Auswirkungen meine Befehle haben. Dies wiederhole ich bei den 3D Funktionen.

    Also, ich versuche nun erstmals ein FPS example auf yoyogames zu verändern. Ich habe es miut meinem Wissen geschafft dass man sich mit den Pfeiltasten umschauen kann. Wie mit dem Analog stick in nem Ego Shooter.^^

    Doch nun wollte ich versuchen dies mit der Maus zu schaffen. Ich habe es auch schon überlegt wie es funktionieren sollte.

    Also: Die maus soll jedes Step in die Mitte des Raumes "springen" Dann bei ner Bewegung mit der Maus soll überprüft werden wie weit sie siczh von der Mitte des Bildschirms wegbewegt. Anhand der "bewegung" soll man sich in die richtung drehen wie die Maus.

    Doch das Problem: Wie setze ich das in Scripts um? Wie kriege ich die X und Y Koordinaten bei aktiviertem 3D in eine Variable?

    (PS: Ich weiss das es viele Topics gibt wo User über so eine Steuerung bitten. Doch immer bekommt man einen Script vorgegaukelt den man selbst nichtmal annährend versteht. Ich möchte hier um Rat Fragen ob sich meine "Theorie" in die Praxis umsetzen lässt.)
  • Es ist überhaupt nicht schwierig, soetwas zu machen. Die X- und Y-Koordinaten der Maus bleiben im 3D-Modus unverändert, sie werden dann aber lediglich bezüglich der Kameraansicht angezeigt.
    Ich habe dazu vor Kurzem ein Beispiel erstellt:

    Dynamic Camera.zip

    Der gesamte Code ist sehr einfach zu verstehen (das denke ich zumindest) und auch ausführlich kommentiert.
  • Danke! Dein Beispiel hat mir das verständniss mit der Maus geholfen. ^^
    Der Rest löste sich fast wie von allein.

    Nun habe ich noch eine Frage die nciht direkt mit 3D Zusammenhängt:

    Wenn sich ein objekt nach links bewegt (x+ = -5) Wie mache ich einen sauberen übergang der geschwindichkeit nach rechts? (Also dass die geschwindichkeit nach links langsamer wird, und dann anfängt nach rechts zu beschleunigen bis auf x = +5) ?

    Wie mache ich das? Ic hversuche das die ganze Zeit zu lösen....
  • Das ist ebenfalls kein Problem.

    Schreibe einfach in das step event deines beweglichen Objektes Folgendes:

    GML-Quellcode

    1. // Steuerung
    2. if (keyboard_check(vk_right)) // Rechts
    3. {if (hspeed < 7)
    4. {hspeed += 1};
    5. friction = 0};
    6. else if (keyboard_check(vk_left)) // Links
    7. {if (hspeed > -7)
    8. {hspeed -= 1};
    9. friction = 0};
    10. else if !(keyboard_check(vk_right)) && !(keyboard_check(vk_left)) // Verlangsamung konfigurieren
    11. {friction = 0.6};
    Alles anzeigen

    Die Reibung (friction) sorgt dafür, dass sich das Objekt allmählig verlangsamt. Der Rest des Codes enthält die üblichen Bewegungsbefehle.
  • Gehört nicht direkt zum Thema, ist mir aber dennoch wichtig:
    Es ist eigentlich nicht nötig, "friction" zwischenzeitlich auf '0' zu setzen. In diesem Fall würde es auch reichen, "friction" einmalig im Create Event festzulegen. Man sollte im Step Event generell sparsam umgehen und unnötige Zeilen vermeiden. Wenn man das nicht von Anfang an bedenkt, verschenkt man wertvolle Performance, von der man beim GM ohnehin nicht allzu viel hat.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Habe ich auch

    habe mich auch mit dem FPS Aus dem Yoyogame sTutorial beschäftigt und schon was richtiges draus gemacht, Titelmenü usw. Naja das ist nicht das Thema, aber ich habe auch die Maussteuerung eingeschaltet aber kann ich auch irgendowe nach oben und Unten schauen? Nur nicht unendlich lange, sonst sieht es aus als ob der Charakter einen Loopign machen würde.
    Geht das überhaupt?
    Hoffe auf eure Hilfe. :headtouch:
  • Also ich habe es durchs herumprobieren geschafft.^^

    Du musst die Maus auch auf die selbsterstellte Z-Achse wirken lassen. Um dann dieses "looping" zu verhindern, musst du einfach eine if-Abfrage machen.

    Hier mal mein Code im End-Step-Event des obj_players:

    GML-Quellcode

    1. mausx = 320 - mouse_x ;
    2. mausy = 240 - mouse_y;
    3. if (mausy >0){
    4. if (zview < 18){
    5. zview+=+mausy/100;
    6. }
    7. }
    8. if (mausy <0){
    9. if (zview > 13){
    10. zview+=+mausy/100;
    11. }
    12. }
    13. direction += +mausx/2;
    14. window_mouse_set(320,240);
    Alles anzeigen


    Es funktioniert damit einwandfrei.^^

    Doch an einem Problem liege ich grad. In meinem Objekt HUD habe ich ja die Waffe des Shooters die gedrawt wird. ich möchte sie nun hin und her schwenken lassen wenn man geht. Ic hhabe scho nexperimentiert, doch es ist nichts sinvolles rausgekommen. wie kriegt man dieses schwenken der Waffe hin?
  • Benutzer online 1

    1 Besucher