Surface Problem bei Fenstermodus

  • Win

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

  • Surface Problem bei Fenstermodus

    Nabend zusammen.

    Habe gerade festgestellt das ich bei meinem Spiel wenn ich in Fenstermodus wechlse folgenden Fehler erhalte:

    GML-Quellcode

    1. ___________________________________________
    2. ############################################################################################
    3. ERROR in
    4. action number 1
    5. of Draw Event
    6. for object obj_light_controller:
    7. Trying to use non-existing surface.
    8. at gml_Script_light_draw (line 2) - draw_surface(surface,view_xview[0],view_yview[0])
    9. ############################################################################################
    10. --------------------------------------------------------------------------------------------
    11. stack frame is
    12. gml_Script_light_draw (line 2)
    13. called from - gml_Object_obj_light_controller_DrawEvent_1 (line 1) - light_draw()
    Alles anzeigen


    Im Vollbild Modus funktioniert das ganze Einwandfrei. Wechlse ich dann per ALT+ENTER in Fenstermodus kommt dieser Fehler.

    Benutze hierfür drei Scripts:

    light_init:

    GML-Quellcode

    1. a_color = make_color_rgb(255-color_get_red(argument0),255-color_get_green(argument0),255-color_get_blue(argument0));
    2. surface = surface_create(800,600);


    light_refresh:

    GML-Quellcode

    1. surface_set_target(surface);
    2. draw_clear(a_color);
    3. draw_set_blend_mode(bm_subtract);
    4. with (obj_spot)
    5. {
    6. draw_sprite_ext(sprite_index,image_index,x-view_xview[0] ,y-view_yview[0],image_xscale,image_yscale,image_angle,image_blend,image_alpha);
    7. }
    8. draw_set_blend_mode(bm_normal);
    9. surface_reset_target();


    light_draw:

    GML-Quellcode

    1. draw_set_blend_mode(bm_subtract);
    2. draw_surface(surface,view_xview[0],view_yview[0])
    3. draw_set_blend_mode(bm_normal);


    Habe dann 2 Controller Objekte einmal für den Schwarzen Hintergrund Surface:

    GML-Quellcode

    1. Information about object: obj_light_controller
    2. Sprite:
    3. Solid: false
    4. Visible: true
    5. Depth: -5000000
    6. Persistent: false
    7. Parent:
    8. Mask:
    9. No Physics Object
    10. Create Event:
    11. execute code:
    12. light_init(make_color_rgb(24,24,24));
    13. Step Event:
    14. execute script light_refresh with arguments (,,,,)
    15. Draw Event:
    16. execute code:
    17. light_draw()
    Alles anzeigen


    und einmal für das Spotlight:

    GML-Quellcode

    1. Information about object: obj_spot
    2. Sprite:
    3. Solid: false
    4. Visible: true
    5. Depth: -1000001
    6. Persistent: false
    7. Parent:
    8. Mask:
    9. No Physics Object
    10. Create Event:
    11. execute code:
    12. sprite_index = spr_light1;
    13. image_blend = c_white;
    14. image_alpha = 0.3;
    15. Step Event:
    16. execute code:
    17. if instance_exists(obj_player)
    18. {
    19. x = obj_player.x+16
    20. y = obj_player.y+16
    21. }
    Alles anzeigen


    Im Anhang ein Bild wie es im Vollbildmodus aussieht. Wie gesagt, wechsle ich in Fenstermodus bekomme ich die Fehlermeldung. Natürlich nur in Levels wo dieses Spotlight nutzen.
    Bilder
    • test1.png

      256,18 kB, 800×450, 812 mal angesehen
  • Super Danke für den Tipp! Habe mein Skript umgeschrieben und funktioniert einwandfrei! :D

    GML-Quellcode

    1. if !surface_exists(surface)
    2. {
    3. light_init(make_color_rgb(24,24,24));
    4. }
    5. else
    6. {
    7. draw_set_blend_mode(bm_subtract);
    8. draw_surface(surface,view_xview[0],view_yview[0])
    9. draw_set_blend_mode(bm_normal);
    10. }