Durch Klick auf Minimap View verschieben

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

  • Durch Klick auf Minimap View verschieben

    Hallo,

    Folgendes Problem:
    ich habe einen Room ( 5120*3930 ), in dem sich ein View ( 1024*768 ) befindet. Außerdem eine Minimap, die sich immer mit dem View mitbewegt. Sie fängt an der Position 12/12 an und hört an der Position 268/204 auf, ist also selber 256*192 groß.

    Ich möchte jetzt, dass durch Mausklick auf eine Stelle auf der Minimap der View entsprechend verschoben wird.

    Hier mal der Code:

    GML-Quellcode

    1. if (mouse_x>=view_xview+12 && mouse_y>=view_yview+12 && mouse_x<=view_xview+268 && mouse_y<=view_yview+204)
    2. {
    3. if mouse_check_button_pressed(mb_left)
    4. {
    5. view_xview = ????????????????
    6. view_yview = ????????????????
    7. }
    8. }


    Ich hoffe mal (ich glaube) dass ich soweit alles richtig gemacht habe, weiß aber nicht, was ich für die Fragezeichen einsetzen muss.
    Ich habe schon den ganzen Tag verschiedene Rechenwege aufgestellt, bin aber nie zu einem Ergebnis gekommen. Komischerweiße kam für view_xview und view_yview immer ein negativer Wert raus, so dass der View nicht mehr im Room lag :dozey:

    Ich weiß nicht mehr weiter.

    Falls ihr eine Alternative zu meinen komplizierten Aufstellungen habt, freu ich mich auch.

    Es wäre schön, wenn ihr euch erstmal ein bisschen in den Code eindenkt und nicht gleich das Handtuch werft (es sei denn es ist ganz einfach und ich habe nur ein Blackout).

    Schon mal vielen Dank
    gm-freak


    //heißt es der oder das View :?:
    [SIZE="25"][COLOR="Red"]XP Hilfe - Schluss mit PC-Problemen[/COLOR][/SIZE]
    [SIZE="20"]http://xphilfe.de.tt[/SIZE]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gm-freak ()

  • (view_xview+12)
    ist der anfang der karte vom raum aus gesehen
    d.h.
    (mouse_x-(view_xview+12))
    ist die maus-position von der karte aus gesehen

    dein verkleinerungsfaktor ist 20
    (in y richtung nich, das würde ich ändern)

    also muss die Position des views beim klicken in die karte
    das 20 fach von der Mausposition relativ von der karte aus gesehen sein :D

    GML-Quellcode

    1. {
    2. view_xview =20*(mouse_x-(view_xview+12))
    3. view_yview =20*(mouse_y-(view_yview+12))
    4. }


    ciao
    iTeM

    EDIT:
    das script oben setzt den view mit der ecke dort hin wo du klickst
    damit der klickpunkt in der mitte des views liegt:

    GML-Quellcode

    1. {
    2. view_xview =20*(mouse_x-(view_xview+12))-512
    3. view_yview =20*(mouse_y-(view_yview+12))-384
    4. }



    EDIT2:
    wenn du das ganze mit 2 views gelöst hast
    dann bekommst du höchstwarscheinlich ein problem:
    du fragst ab ob sich die maus in einem bestimmten bereich befindet
    soblad sich die maus aber in diesem bereich befindet
    ist sie in einem anderen view und befindet sich dort nicht mehr in diesem bereich
    hoffe das ist verständlich

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

  • Vielen Dank für deine Beitrag iTEM, du hast mir sehr geholfen.
    (Auch danke an Alexander, war allerdings weniger hilfreich ;))

    Zu EDIT: Super! :D
    Zu EDIT2: Hab nur ein View ;)

    Allerdings habe ich jetzt das Problem, dass wenn man in der Nähe von einer Ecke auf die Minimap klickt, der View so verschoben wird, das er zum Teil nicht mehr im Room liegt.

    Lässt sich da was machen???


    gm-freak
    [SIZE="25"][COLOR="Red"]XP Hilfe - Schluss mit PC-Problemen[/COLOR][/SIZE]
    [SIZE="20"]http://xphilfe.de.tt[/SIZE]
  • du kannst den klickbaren bereich der minimap verkleinern
    also um

    (1024/2)/20 pixel = 25pixel

    aber das ist natürlich ned so besonders,
    weil man dann ganz am rand einfach nur nicht mehr klicken kann

    du könntest auch dem View ein objekt zum folgen zuweisen
    und dann diesen code benutzen

    GML-Quellcode

    1. {
    2. follow_me.x =20*(mouse_x-(view_xview+12))-512
    3. follow_me.y =20*(mouse_y-(view_yview+12))-384
    4. }

    nachteil: der view ist nich gleich da sondern "fährt" erst zu gewünschten Stelle

    ciao
    iTeM

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von iTeM ()

  • Ich hab´s jetzt gelöst!
    Wenn ich mir den Code jetzt so ansehe, war es eigentlich gar nicht so schwer :)

    GML-Quellcode

    1. if view_xview < 0 then view_xview = 0;
    2. if view_yview < 0 then view_yview = 0;
    3. if view_xview > 4096 then view_xview = 4096; //Room minus View
    4. if view_yview > 3162 then view_yview = 3162;


    Danke für eure Hilfe
    [SIZE="25"][COLOR="Red"]XP Hilfe - Schluss mit PC-Problemen[/COLOR][/SIZE]
    [SIZE="20"]http://xphilfe.de.tt[/SIZE]
  • Benutzer online 1

    1 Besucher