Hilfe bei meiner Kamera

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe bei meiner Kamera

    Hey :D
    Ich hab eine frage, ich hab eine Kamera erstellt die ganze zeit den Player folgt und wenn ich die rechte Maustaste gedrückt halte folgt die Kamera ein teil die Maus ( soll ein Rechtklick eines Shooters darstellen) (Top-down-shooter)
    Nun was ich dran ändern will ist das die Kamera nicht instant bei der Maus ist wenn ich die rechte Maustaste drücke :----S , sondern das die sich dort hin bewegt mit nem Speed von sagen wir 5 und es soll auch funktionieren wenn sich beide Objekte bewegen. :thumbup:

    Mein code: :rolleyes:
    obj_camera.Step event:
    ///Control Camera;

    if mouse_check_button(mb_right)

    scr_camera()

    else
    alarm[0] = 1


    und in Alarm0 :
    obj_camera.x = obj_character.x
    obj_camera.y = obj_character.y

    damit er sich wieder zum player zurück bewegt wenn man die Rechte Maustaste los lässt.

    scr_camera:
    obj_camera.x = obj_character.x/2+mouse_x/2
    obj_camera.y = obj_character.y/2+mouse_y/2


    Hoffe einer kann mir helfen, danke :thumbsup:

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von hirasu ()

  • Hi Hirasu,

    Dein Script würde die Kamera nie an der gewünschten Position ankommen lassen, weil du ja immer durch 2 dividierst, was du brauchst ist in etwa so etwas;

    dein obj_camera merkt sich gewisse zielkoordinaten

    GML-Quellcode

    1. if (mouse_check_button(mb_right))
    2. {
    3. ziel_x = mouse_x;
    4. ziel_y = mouse_y;
    5. }
    6. else
    7. {
    8. ziel_x = obj_character.x;
    9. ziel_y = obj_character.y;
    10. }


    und im step event

    GML-Quellcode

    1. if (distance_to_point(ziel_x,ziel_y) > 5)
    2. {
    3. camera_speed = 5;
    4. }
    5. else
    6. {
    7. camera_speed = distance_to_point(ziel_x, ziel_y);
    8. }
    9. move_towards_point( ziel_x, ziel_y, camera_speed);


    damit bewegt sich die camera mit max speed von 5 auf den Punkt zu wo du die recht maustaste gedrückt hälst und wenn du loslässt mit der selben geschw zurück zum Spieler.
    Mitunter musst du etwas einbauen bei der die Geschwindikeit höher wird wenn die camera zurückkehrt, beim loslassen der maus.

    Ich hab den code nicht getestet, mitunter muss er noch ein wenig getweaked werden

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @Aku_Ryou
    Danke erstmal für deine Antwort.
    So ist es leider nicht wie ich es meinte. ich hab mich im ersten post falsch ausgedrückt :----S , ich verwende :
    obj_camera.x = obj_character.x/2+mouse_x/2
    obj_camera.y = obj_character.y/2+mouse_y/2
    weil es bewirkt das sich die Kamera nur zur hälfte der Maus yx Position bewegt und die andere hälfte zwischen den Player ist damit sich die Kamera nicht unendlich weit weg bewegt vom obj.character, was der fall ist mit deinem Code, da klappt zwar der Speed perfekt aber wenn die Kamera bei der Maus ist bewegt sie sich einfach weiter bis zum ende der Map. ( kann man nicht irgendwie ein Limit setzen per distance checking(obj_character -> obj_camera) damit sich die kamera ab ein bestimmten wert sich nicht weiter weg vom Player bewegt aber so das die Kamera noch beweglich ist? (360°) ?( )

    Mit meinem Script isses genau so wie ich es möchte AUSER das sich die Kamera direkt zu der Position bewegt. :headtouch:


    @Bartlbey
    Das ist es leider auch nicht aber ich kann es für was anderes gut gebrauchen danke :)
  • Achso, also wird quasi das Sichtfeld nur in eine Richtung erweitert und in die anderen Richtungen verkürzt?

    MIt dem distance_to_object(obj_character) oder distance_to_point(x,y) kannst du abfragen wie weit deine kamera schon weg ist vom Spieler und die bewegen stoppen wenn sie weiter als soundso viel pixel entfernt ist.


    Soll die Bewegung fließend sein oder ruckartig?

    Wenn ruckartig, dann kannst du auch die lengthdir funktionen benutzen um deine Kamera sofort auf einen Punkt zu setzen der ein Punkt auf einer Kreisbahn rund um den Spieler ist.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @Aku_Ryou
    Bei meinem Code erweitert sich das Sichtfeld je weiter man mit der Maus vom Player weggeht und je nähe desto geringer und das in jede richtung:

    ----------------------------------------------------------------------------
    Ich hab es mit deinem Code nochmal getestet und die Ziel_x / Ziel_y von mouse_x/y auf obj_character.x-100/2+mouse_x/2 und obj_character.y/2+100+mouse_y/2 umgestellt und nun klappt es fast!

    Die Kamera bewegt sich mit dem eingestellten Speed wie ich es wollte nur wenn ich z.b die Maus ganz schnell im kreis drehe kommt die Kamera nie zu dem punkt an also die Kamera zieht wenn ich die Maus hin und her

    Kann man das irgendwie so machen das sich die Kamera immer gerade aus von der Player Direction richtung zu der Position bewegt? das die Kamera und der Player in eine linie sind? und das die kamera immer mit der selben zeit zu ihren Punkt kommt egal wie schnell ich die Maus hin und her bewege?

    Rot = Player | Geld = Kamera | Blue = Maus
    und wenn die Kamera dann auf der gewünschten Position ist ( obj_character.x-100/2+mouse_x/2 und obj_character.y/2+100+mouse_y/2 ) soll er ganze zeit die kamera instant verfolgen ( ziel_x = obj_character.x; / ziel_y = obj_character.y; ) und wenn ich die Maustaste los lasse soll er wieder zum Player zurück. Also die Kamera soll sich nur mit ein Delay (Speed) bewegen solange er noch nicht auf der gewünschten Position ist.

    Sorry das ich es so verwirrend bin xD

    Ich sollte vielleicht ein kleines Video machen damit ich es besser erklären kann.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von hirasu ()

  • Also mit:

    GML-Quellcode

    1. //STEP CAMERA
    2. x = obj_player.x + lengthdir_x(radius,obj_player.direction);
    3. y = obj_player.y + lengthdir_y(radius,obj_player.direction);
    4. if mouse_check_button(mb_left) == 1
    5. {
    6. radius += 1;
    7. }
    8. if mouse_check_button(mb_left) == 0 and radius > 0
    9. {
    10. radius -= 1;
    11. }
    Alles anzeigen


    sieht die kamera ohne delay immer in die Richtung in die der Spieler sieht. radius vergrößerst du bei einem Mausklick bis losgelassen wird und dann "fällt" die kamera langsam wieder zurück zum spieler

    der Code berechnet dir also die x und y koordinate deiner kamera auf einer Kreisbahn mit Radius radius in Richhtung Spielerblickrichtung. ohne das addieren der Spielerkoordinaten rotiert deine Kamera um die 0,0 Koordinate im Raum.

    In dem Fall kannst und brauchst du die distanz zwischen kamera und Spieler nicht zu berechnen... ach es gibt immer so viele Lösungswege^^

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)