Surface verfolgt view

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

  • Surface verfolgt view

    Hey,
    ich habe das Problem, dass meine Surface ungewollt der View folgt und ich bekomme das nicht abgestellt.
    Vor ab der Code ist ziemlich lang und für Aussenstehende wohl reinstes "wirrwar" weshalb ich nur beschreibe wie ich es gemacht habe ^^

    Objekt welches die Surface hat

    Quellcode

    1. Create:
    2. surf = surface_create(view_wview[0],view_hview[0])
    3. Draw:
    4. if keyboard_check(vk_up) { y -=2 }
    5. if keyboard_check(vk_down) { y +=2 }
    6. if keyboard_check(vk_left) { x -=2 }
    7. if keyboard_check(vk_right) { x +=2 }
    8. surface_set_target(surf)
    9. draw_set_color(c_black)
    10. draw_rectangle(view_xview[0],view_yview[0],view_xview[0]+view_wview[0],view_yview[0]+view_hview[0],0)
    11. draw_circle_color(x,y,300,c_white,c_black,0)
    12. surface_reset_target()
    13. draw_set_blend_mode(bm_add)
    14. draw_surface(surf,view_xview[0],view_yview[0])
    15. draw_set_blend_mode(bm_normal)
    16. if keyboard_check(ord("W")) { view_yview[0] -=3 }
    17. if keyboard_check(ord("S")) { view_yview[0] +=3 }
    18. if keyboard_check(ord("A")) { view_xview[0] -=3 }
    19. if keyboard_check(ord("D")) { view_xview[0] +=3 }
    Alles anzeigen


    Lasse ich nun die View mit den WASD-Tasten in einem anderen Objekt verschieben, bewegt sich die Surface trotzdem mit. Ich lasse doch die Surface immer "säubern" und der Kreis bewegt sich doch in Wirklichkeit gar nicht mit. Woran liegt das?
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Aha okey, also müsste ich die X und Y Koordinaten speichern, an denen die Surface erstellt worden ist und an dieser Position die Surface zeichen lassen? Wenn ich die Instanz mit der Surface bewegen will, muss ich aber auch diese gespeicherten Koordinaten ändern. So klappt es glaube ich, aber ich lasse die Frage noch etwas offen, vielleicht hat ja nochjemand Tipps ^^
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Du musst beachten, dass wenn du Surfaces mit surface_set_target(surface) aktivierst, dass fortan alle Draw-Koordinaten nur für die Surface gelten,
    bis diese mit surface_reset_target() wieder deaktiviert wird. Wenn du also etwas ganz normal mit view_xview=0 und view_yview=0 zeichnen willst, kannst du den view-Teil weglassen (bis auf die width- und height-Variablen natürlich, welche nicht von der Position der View abhängig sind), da 0 immer oben links beginnt, vorausgesetzt du lässt die Surface (wenn sie gezeichnet wird mit draw_surface!) selbst mit den View-Koordinaten zeichnen, wie du es ja auch machst.
  • Also ich habe es immer noch nicht so hinbekommen, wie ich es gerne hätte.

    Was ich will ist, dass der Mittelpunkt der Surface immer die X und Y Koordinaten meines Objektes hat, egal ob es am Rand der derzeitigen View ist oder nicht. Bewegt sich die View, soll aber die Surface an diesem Punkt bleiben, außer das Objekt wird bewegt.
    Im Grunde will ich nur, dass die Surface an meinem Objekt hängt und nicht von der View.
    Zum verdeutlichen meines Ziels habe ich 2 Bilder angehängt, das Gelbe ist die derzeitige View und das Rote soll die Surface sein, welcher Mittelpunkt die X und Y Koordinaten meines Objektes sind.
    Bilder
    • 1.PNG

      767 Byte, 200×150, 216 mal angesehen
    • 2.PNG

      1,14 kB, 300×250, 376 mal angesehen
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Schön wäre es! :D Habe ich auch schon probiert, aber der Origin von der Surface ist 0. Die Surface wird ja immer von der jetztigen View genommen, d.h. ich müsste die Surface verschieben und nicht der Punkt, an dem sie gezeichnet werden soll.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Ich versteh das jetzt nicht genau, mann könnte das doch simpel mathematisch lösen, oder ?

    mit:

    GML-Quellcode

    1. draw_surface(id,object.x+(surface_get_width(id)/2),object.y+(surface_get_height(id)/2))


    Dann müsste er die Mitte des Surface's doch auf dem Origin vom Objekt "drawn", oder ?

    -Nils
  • Ich habe jetzt ein Bsp gemacht. Wie man sehen kann, funktioniert alles, wenn die View auf x0 und y0 ist, aber nicht wenn die View irgendwo anders ist. Am besten wäre es, wenn die Surface aber im Mittelpunkt vom Objekt ist.
    Dateien
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.