background an view/room anpassen

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

  • background an view/room anpassen

    guten morgen,

    ich hab heut mal eine frage die mir etwas kopfzerbrehen bereitet. es geht um das scrollen eines backgrounds.

    gegeben:

    background der vertikal scrollen soll.
    raum größer als die view, eine view

    nun möchte ich dasss sich der background so vertikal bewegt dass er durch das verschieben der view scrollt. das problem ist dass der background nur soweit scrollen darf dass, wenn die view am unteren/oberen ende des raumes ankommt, der background auch am unteren/oberen ende ankommt. jetzt weiß ich im vorfeld nicht wie groß später die räume sein werden und wo im raum die view stehen wird wenn der raum startet. kann ich irgendwie ermitteln wie der background bei raumstart ausgerichtet werden muss und wie ich auf den multiplilator komme der dann beim

    GML-Quellcode

    1. background_y[0] =view_yview[0] * multiplikator
    benötigt wird. geht das ganze überhaupt?

    mfg
  • Ich hab das jetzt nicht ganz verstanden, aber ich denke mal die Variablen wären die, die du suchst:
    room_width
    room_height
    view_xview
    view_yview
    view_wview
    view_hview
    ​background_x
    ​background_y
    ​background_width
    ​background_height

    Edit: mist war zu langsam....
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • hey, thx für eure antworten.

    leider ist es nicht ganz so das was ich suche, der hintergrund bleibt ja letztlich "oben kleben" was ich brauch ist dass er sich mitbewegt so dass wenn das taxi aum untersten ende des raumes ist auch der background unten ist und wenn das taxi oben dann auch der background. ich befürchte fast dass ich ne variable für den abstand view/raum oben und view/raum unten benötige oder sowas. bin leider nen mathe blindgänger, denke eher bildlich und hab da so etwas meine probleme. ich habe ma ne exe angehängt, vllt versteht ihr dann wie ich das denke =)

    ver_4_6_nov_2015.exe


    mfg
  • ich wieder ;)

    also...das vom chris87 leuchtet mir ein, macht auch ähnliches wie das was ich benötige. nur wird es für mich wohl nicht reichen. ich versuche das mal näher zu erläutern. die view folgt dem taxi (danke drachen, das taxi is das zielobjekt der view. sieht man im video glaube ganz gut xD )
    jetzt weiß ich im vornherein nicht wie groß später die level sein werden daher muss ich mir iwie ne funktion basteln die den background zu levelbeginn an die passende stelle im raum setzt, und dann sobald die view bewegt wird sich dementsprechend der bg bewegen soll. wenn die view am oberen rand aneckt soll dies der background auch tun. wenn die view am unteren ende des raumes ankommt dann auch der background. hab mal in gimp nen bsp gebaut. hoffe da is erkennbar wie ich das meine:
    bild mit background am oberen rand

    bild mit background am unteren rand


    sry iwie stehe ich da grade aufn schlauch.
  • Exakt genau das, tut doch mein Skript. Oder habe ich irgendetwas falsch verstanden? Warum wird es deiner Meinung nach nicht reichen?

    GML-Quellcode

    1. background_y[0] = view_yview[0]*background_height[0]/(room_height-view_hview[0]);

    Einfach diesen Code im Step Event ausführen lassen und du hast das was du willst.

  • Hi

    Gehe ich recht in der Annahme das du mit den Views noch nicht soviel gemacht hast ?
    Also im Normalfall machts du deinen Raum so groß wie dein Hintergrund. Sagen wir mal 4000x1000 Pixel.
    So jetzt stellen wir mal deinen View ein.
    Im Abschnitt "View in Room" stellst du dein Viewfenster ein.
    sagen wir mal 640x480 Pixeln. Somit wird ein Spielausschnitt 640x480 Pixeln groß.
    Im Abschnitt "Port on Screen" stellst du ein wie gross dein Windwosfenster sein soll.
    Nehmen wir mal du stellst 320x200 Pixeln ein. Somit verkleinerst du dein Spiel. Obwohl deine Spielfeld immer noch 640x480 Pixeln ist. Im Normalfall lässt man es genau so groß wie im Abschnitt View in Room..
    Kommen wir nun zum Abschnitt "Objekt following"
    OK hier stellst du ein auf was sich der View mittig einstellt und verfolgt.
    Hbor = Horizontalerrand und Vbor = Vertikalerrand. Mit diesen Einstellung legst du um den Sprite ein unsichtbarer Rand. Nehmen wir mal an Hbor = 256 und Vbor=256 Pixeln. Der Sprite wird dann immer 256 Pixeln vom Viewrand entfernt sein.
    Und normal braucht du keinen Befehl um den Hintergrund zu bewegen, außer du willst einen Paralaxhintergrund. Sprich der Hintergrund hat mind. 2 Ebenen mit unterschiedlichen Geschwindigkeiten. Aber das konnte aus deinen Beschreiben von deien Problem nicht herrauslesen.
    Hier noch ein Video-Tut über die Views.


    Gruß Drachen
  • Ich hab das so verstanden:

    Der Hintergrund im View soll nicht weiter scrollen wie vorgegeben.
    Also nicht mehr Hintergrund anzeigen (obwohl vorhanden ist) wie zb auf den beiden Bildern hell hervorgehoben.

    Wenn der View zb nach oben scrollt soll der Background ab ner bestimmten höhe aufhören mit zu scrollen.

    Meine Vorstellung im Anhang ^^
    Bilder
    • gm2.png

      129,54 kB, 640×387, 304 mal angesehen
  • huhu ich wieder ;)

    also, das script vom chris macht ja genau das was ich möchte. aber, am ende, also wenn die view am boden ankommt dann ist der bg halt nicht am boden wie ich es wollte. ich hab nomma ne beispiel exe hochgeladen bei der ich 2 bg,s habe. der mit den kacheln sollte halt bei dem ganzen niemals zu sehen sein. ich hoffe das verdeutlicht nun mein problem =)
    test_bg_scroll.exe



    mfg
  • Probiers mal mit:

    GML-Quellcode

    1. view_yview[0] = clamp(view_yview[0],0,room_height-view_hview[0]);

    Das hält deinen view y wert zwischen 0 und raumhöhe minus viewhöhe, damit sollte nix mehr aus dem von dir gesetzen Rahmen rutschen.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • hey Aku_Ryou,

    könntest du mir noch verraten wo ich das einfügen muss? auch ins step event? habs versucht aber keinen unterschied bemerkt.
    *ich änder glaub mein profil wieder in gml anfänger xD*

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

  • Achso, jetzt seh ichs erst: Deine View bewegung im Raum passt eh. Aber der background bewegt sich nicht bis nach ganz unten. Das liegt entweder an den Verhältnissen von backgroundhöhe, viewhöhe und Raumhöhe oder am Tempo mit dem die view und der background scrollen.

    Also im step Event nach aller bewegung von view und background gibst du meinen code rein, aber mit diesen werten:

    GML-Quellcode

    1. view_yview[0] = clamp(view_yview[0],0,background_y[0]+background_height[0]);




    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • huhu,

    habs heut endlich hinbekommen. klar für andere wäre es wohl einfach gewesen aba mathe is bei mir schon paar jahre her xD vllt gibts ne bessere und performantere lösung als die meine. zumal oben und unten immer nen kleiner ruckler entsteht. hier mal meine lösung:

    create event:

    GML-Quellcode

    1. weg_view = room_height - view_hview[0]
    2. weg_bg = room_height - background_height [1]
    3. view_prozent = 0
    4. bg_prozent = 0


    step event:

    GML-Quellcode

    1. view_prozent = view_yview[0]* 100 / weg_view
    2. bg_prozent = weg_bg * view_prozent / 100
    3. background_y [1] = bg_prozent


    bis denn erstmal =)