Anzeige Fehler

  • GM 8

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

  • Anzeige Fehler

    Hallo,

    Ich habe mit folgender Funktion für mein Spiel ein Sprite des Hintergrunds erstellt:

    GML-Quellcode

    1. pausebild = sprite_create_from_screen(view_xview[0],view_yview[0],640,480,0,0,0,0)


    Und mit folgender Funktion,möchte ich es anzeigen(Für mein Menü,muss das Spiel pausiert werden und wenn man die Instanzen deaktiviert,werden sie ja auch nciht mehr angezeigt,deshalb der Screenshot):

    GML-Quellcode

    1. draw_sprite(pausebild,image_index,view_xview[0],view_yview[0])


    Problem:

    Wenn man sich noch in dem View befindet,indem man am anfang ist( ca. 500x480 (also noch nicht weiter nach rechts gelaufen ist)),klappt alles,sobald man aber weiter läuft,verschiebt sich das Screenshot immer weiter nach links,bis man es,wenn man weit genug gelaufen ist,ihn nicht mehr sehen kann.

    Hier mal der komplette Code:

    Spoiler anzeigen

    Information about object: menue_button

    Sprite: menü_button
    Solid: false
    Visible: true
    Depth: -10
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    set variable global.menue to 0

    Step Event:
    execute code:

    if(mouse_x > view_xview[0]+580 && mouse_y > view_yview[0]+1 && mouse_x < view_xview[0]+580+sprite_width && mouse_y < view_yview[0]+1+sprite_height && mouse_check_button_pressed(mb_left))
    {
    if(global.menue == 1)
    {
    global.menue = 0
    instance_activate_all()
    }
    else
    {
    pausebild = sprite_create_from_screen(view_xview[0],view_yview[0],640,480,0,0,0,0)
    instance_deactivate_all(true)
    global.menue = 1
    }
    }

    if global.menue is equal to 1
    COMMENT: Noch nicht fertig!!!
    execute code:

    // Weiter Button
    if(mouse_x > view_xview[0]+330 && mouse_y > view_yview[0]+40 && mouse_x < view_xview[0]+330+300 && mouse_y < view_yview[0]+40+100 && mouse_check_button_pressed(mb_left))
    {
    global.menue = 0
    instance_activate_all()
    }

    //**********************************************************************************************************************
    // Neustart Button
    if(mouse_x > view_xview[0]+330 && mouse_y > view_yview[0]+150 && mouse_x < view_xview[0]+330+300 && mouse_y < view_yview[0]+150+100 && mouse_check_button_pressed(mb_left))
    {
    if (global.boden == 1)
    {
    global.menue = 0
    instance_activate_all()
    room_restart()
    }
    else
    {
    show_message("Du kannst das Level nicht neustarten, während du dich in der Luft befindest!")
    }
    }

    //**********************************************************************************************************************
    // Levelauswahl
    if(mouse_x > view_xview[0]+330 && mouse_y > view_yview[0]+260 && mouse_x < view_xview[0]+330+300 && mouse_y < view_yview[0]+260+100 && mouse_check_button_pressed(mb_left))
    {
    if (global.boden == 1)
    {
    global.menue = 0
    instance_activate_all()
    // Zum Room Levelauswahl gehen
    }
    else
    {
    show_message("Du kannst nicht zur Levelauswahl, während du dich in der Luft befindest!")
    }
    }
    //**********************************************************************************************************************
    // Hauptmenü Button
    if(mouse_x > view_xview[0]+330 && mouse_y > view_yview[0]+370 && mouse_x < view_xview[0]+330+300 && mouse_y < view_yview[0]+370+100 && mouse_check_button_pressed(mb_left))
    {
    global.menue = 0
    instance_activate_all()
    // Zum Room Hauptmenü
    }


    Draw Event:
    execute code:

    if (global.menue == 0)
    {
    draw_sprite(sprite_index,image_index,view_xview[0]+580, view_yview[0]+1)
    }
    if (global.menue == 1)
    {
    draw_sprite(pausebild,image_index,view_xview[0],view_yview[0])
    draw_sprite(sprite_index,image_index,view_xview[0] + 580, view_yview[0] + 1)
    draw_sprite(spr_statusbar_menue,0,view_xview[0] + 320,view_yview[0] + 32)
    }



    if global.menue is equal to 1
    COMMENT: Noch nicht fertig!!!
    execute code:

    // Weiter Button
    draw_sprite(spr_weiter,image_index,view_xview[0] + 330,view_yview[0] + 40)
    // ************************************************************************
    // Restart Button + Levelauswahl Button
    if (global.boden == 0)
    { // Wenn der Boden nicht berührt wird
    draw_sprite(spr_neustart_deaktiviert,image_index,view_xview[0] + 330,view_yview[0] + 150)
    draw_sprite(spr_levelauswahl_deaktiviert,image_index,view_xview[0] + 330,view_yview[0] + 260)
    }
    if (global.boden == 1)
    { // Wenn der Boden berührt wird
    draw_sprite(spr_levelauswahl,image_index,view_xview[0] + 330,view_yview[0] + 260)
    draw_sprite(spr_neustart,image_index,view_xview[0] + 330,view_yview[0] + 150)
    }
    // ************************************************************************
    // Hauptmenü Button
    draw_sprite(spr_hauptmenue,image_index,view_xview[0] + 330,view_yview[0] +370)






    Hoffe das mir da jemand helfen kann :)

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

  • also du erstellst dein Screen falsch.

    Du nimmst das Raster von:
    view_xview[0] bis 640
    view_yview[0] bis 480
    aber es muss so sein:
    view_xview[0] bis view_xview[0] + 640
    view_yview[0] bis view_yview[0] + 480

    also:

    GML-Quellcode

    1. pausebild = sprite_create_from_screen(view_xview[0],view_yview[0],view_xview[0]+640,view_yview[0]+480,0,0,0,0)


    nur so nebenbei: 640 und 480 sind ja die breiten/höhen oder?
    dann könntest du auch:

    GML-Quellcode

    1. pausebild = sprite_create_from_screen(view_xview[0],view_yview[0],view_xview[0]+view_wview[0],view_yview[0]+view_hview[0],0,0,0,0)

    Vorteil: Falls du die Viewhöhe bzw. breite veränderst, brauchst du am Code nichts mehr ändern.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Hey vielen Dank,habe mich echt gewundert was falsch ist^^

    Naja,am eigenen Code ists eben schwerer den Fehler zu finden,als bei dem Code eines anderen^^

    Vielen Dank :)


    EDIT: Vorfreude war mal wieder zu früh^^ , ist immer noch versetzt,also muss es beim drawen liegen?
  • Bewegt sich dein Spieler über die 0te oder 1te view? Wie groß ist dein Raum?

    Ps: Ich sehe gerade in der Hilfe das die Funktion
    sprite_create_from_screen(x,y,w,h,precise,transparent,smooth,preload,xorig,yorig)

    Also hat deine Funktion doch gepasst. Zurzeit sehe ich keinen Fehler, aber ich werde weitersuchen, und editer diesen Beitrag dann.

    MfG Rodrog

    Edit: Jetzt versteh ich erst recht dein Problem nicht, kannst du mal eine gmk senden bzw. die exe damit ich so ungefähr sehe was falsch ist.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • soweit ich weiß (kann gut sein das ich falsch liege) erstellt sprite_create_from_screen einen sprite von dem was gerade in das fenter gezeichnet wird. Da sollte also rein theoretisch die view verschiebung schon mit drin sein. Ich hab es nciht ausprobiert und ich könnte sehr falsch liegen doch probier mal:
    sprite_create_from_screen(0,0,640,480,0,0,0,0)
  • Mein Raum:

    Settings
    Spoiler anzeigen
    Width = 10000
    Height = 480


    Views


    EDIT:

    Hellfish schrieb:

    soweit ich weiß (kann gut sein das ich falsch liege) erstellt sprite_create_from_screen einen sprite von dem was gerade in das fenter gezeichnet wird. Da sollte also rein theoretisch die view verschiebung schon mit drin sein. Ich hab es nciht ausprobiert und ich könnte sehr falsch liegen doch probier mal:
    sprite_create_from_screen(0,0,640,480,0,0,0,0)

    OMG du bist ein Genie,es klappt :thumbsup: :thumbsup: :thumbsup: :thumbsup:
  • Hellfish schrieb:

    soweit ich weiß (kann gut sein das ich falsch liege) erstellt sprite_create_from_screen einen sprite von dem was gerade in das fenter gezeichnet wird. Da sollte also rein theoretisch die view verschiebung schon mit drin sein. Ich hab es nciht ausprobiert und ich könnte sehr falsch liegen doch probier mal:
    sprite_create_from_screen(0,0,640,480,0,0,0,0)

    Ohh.. stimmt! Total vergessen... Man lernt doch wohl nie aus ;)

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Des Rätsels Lösung


    Also nochmal zusammenfassend,das es jeder verwenden kann,der auf das selbe Problem stößt^^:

    Die Funktion:

    GML-Quellcode

    1. sprite_create_from_screen
    erstellt einen Sprite aus einem bestimmten Abschnitt des soeben angezeigten Teil des Rooms.
    Für den kompletten angezeigten Teil des soeben zu sehen Teil des Rooms,kann man folgende Funktion nutzen:

    GML-Quellcode

    1. variable = sprite_create_from_screen(0,0,640,480,0,0,0,0)
    wobei 640 und 480 die Breite/Höhe des Views entsprechen.

    Auszug aus der Hilfe des GM: ( gamemaker.info/de/manual/409_01_sprites )
    sprite_create_from_screen(x,y,w,h,precise,transparent,smooth,preload,xorig,yorig) Erstellt ein Sprite von der angegebenen Bildfläche. Dies macht es möglich, ein beliebiges Sprite zu erstellen. Zeichne mit den Zeichenfunktionen ein Bild auf dem Bildschirm und mache dann ein Sprite davon. (Wenn du es nicht im Draw Event machst wird dies sogar nicht auf dem Bildschirm angezeigt.) Die anderen Parameter sind wie oben. Die Funktion gibt den Index des neuen Sprites wider. Vorsicht ist hier geboten. Auch wenn wir hier über den Bildschirm reden, ist es die Zeichenregion die zählt. Das dort möglicherweise ein Fenster ist und dies skaliert wird wird nicht beachtet.


    lg,domi

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