window_set_position() - Malen mit dem Spielfenster verhindern

  • Win
  • window_set_position() - Malen mit dem Spielfenster verhindern

    Guten Abend,

    ich habe zu GM8.1-Zeiten bei meinem Spiel die Spielfensterverschiebung mit der Maus manuell realisiert, mit window_set_position(x,y).
    Nachdem das eine Weile lang nicht ging in GM-Studio habe ich es bisher gelassen.

    Heute bin ich draufgekommen, dass es wieder funktioniert. Naja fast ...



    Mit dem Spielfenster kann man jetzt malen, auf alles was nicht das Spielfenster selbst ist.
    Nicht ganz der gewünschte Effekt.
    Hat jemand von euch schon Erfahrung mit der Funktion window_set_position() in windows 7?
    Kann man irgendwie einrichten, dass sich die Bildschirmdarstellung jeden Step sozusagen aktualisiert, oder könnte es ein Treiberproblem sein?

    Man kann den Effekt einfach testen indem man bei window_set_position(x,y) verschiedene Werte einsetzt.
  • Huh? wie ist das jetzt passiert?

    Verschiebst du einfach das Spielfenster am Desktop, oder versuchst du im Spiel ein eigenes Fenstersystem einzubauen soass du kleine "views" hin udn herschieben kannst?

    Schaut auf jedenfall nach einem Framebuffer aus welcher nicht jeden Frame "gecleared" wird.
    (z.B: bevor du renderst solltest du am anfang des ersten Draw-events den framebuffer schwarz ausfüllen:)

    GML-Quellcode

    1. draw_clear(c_black);


    /Edit: oder verstehe ich da was falsch?

  • LEWA schrieb:

    Huh? wie ist das jetzt passiert?

    Verschiebst du einfach das Spielfenster am Desktop, oder versuchst du im Spiel ein eigenes Fenstersystem einzubauen soass du kleine "views" hin udn herschieben kannst?

    Schaut auf jedenfall nach einem Framebuffer aus welcher nicht jeden Frame "gecleared" wird.
    (z.B: bevor du renderst solltest du am anfang des ersten Draw-events den framebuffer schwarz ausfüllen:)

    GML-Quellcode

    1. draw_clear(c_black);


    /Edit: oder verstehe ich da was falsch?

    Ich verschiebe das Spielfenster am Desktop selbst, also keine Views.
    und draw_clear() bzw. draw_clear_alpha() verwende ich im Draw-Event ohnehin seit Anbeginn der Gezeiten.^^
    Wenn ich das Spiel beende dann bleibt das "gemalte" Fenster bestehen, bis ich mit einem anderen Applikationsfenster "darüberwische".

    Also wird vielleicht der Framebuffer von Windows selbst nicht geleert nachdem window_set_position() ausgeführt wird?
  • Habe das selbst auf meinem rechner ausprobiert.
    Im Step event habe ich folgendes stehen:

    GML-Quellcode

    1. if(mouse_check_button(mb_right)){
    2. window_set_position(display_mouse_get_x()-200,display_mouse_get_y()-200);
    3. }

    Funktioniert bei mir problemlos.

    Tritt bei dir der Fehler auch auf wenn du das Fenster mithilfe der Fensterleiste ziehst?
    Ansonsten tippe ich auf ein Grafiktreiberproblem.

  • Ok danke fürs Testen, das hilft mir schonmal!

    Das Problem tritt nicht auf wenn ich das Fenster (mit Windows-Fensterleiste) verschiebe.
    Nur dann, wenn ich in den Global Game Settings "Borderless Window" einstelle und die Funktion selbst zusammenbaue sozusagen,
    bzw. alleine schon mit der genannten Funktion.
    Hätte dazusagen sollen, dass ich alles mit der Einstellung "Borderless Window" gemacht habe.
  • RLP schrieb:

    Ok danke fürs Testen, das hilft mir schonmal!

    Das Problem tritt nicht auf wenn ich das Fenster (mit Windows-Fensterleiste) verschiebe.
    Nur dann, wenn ich in den Global Game Settings "Borderless Window" einstelle und die Funktion selbst zusammenbaue sozusagen,
    bzw. alleine schon mit der genannten Funktion.
    Hätte dazusagen sollen, dass ich alles mit der Einstellung "Borderless Window" gemacht habe.


    Wusste garnicht dass es die Option gibt. XD (Die wurde ja anfangs entfernt, oder?) Hab das aber auch mal ohne dem Window border ausprobiert. Funktioniert auch hier ohne große probleme.
    Könnte aber auch sein dass dies Treiberabhängig ist. Mit was für einer GPU hast du das getestet? IntelHD oder einer dedizierten Grafikkarte? Falls du die möglichkeit hast zwischen 2 GPUs zu wechseln würde ich dies mal ausprobieren ob du den Fehler bei beiden Grafikchips hervorrufen kannst. (Ich habe es bei mir auf einer Nvidia GPU getestet.)