Kein Kacheleffekt bei Vertikal-Scrolling

  • Kein Kacheleffekt bei Vertikal-Scrolling

    Hallo liebes Forum.

    Habe diesbezüglich bereits im Chat schon 'rumgenervt, doch bin ich wohl zu konfus, um mein Problem verständlich zu machen. Zur Einleitung (und ewigen Wiederholung): ich bin ein Noob und werde es immer bleiben. Daher erscheinen mir gewisse Dinge nicht logisch und ich stelle möglicherweise Fragen, die so manchen "Durchblickenden" belustigen...

    Es geht um einen mitscrollenden Hintergrund, der sich in einem anderen Tempo als die Spielfigur bewegt. Der Code hierfür sieht in meinem Fall folgendermassen aus (Horizontal-Scroll):

    Beides im Scriptordner:

    Script namens "draw_background_htile"

    bg_width = background_get_width(argument0);
    for(c = 0; c < ceil(room_width/bg_width); c+=1) {
    draw_background(argument0,((argument1 mod bg_width) - bg_width) mod bg_width + (bg_width * c) , argument2);
    }


    Script für einen horizontal verlaufenden Room (Beispiel):

    draw_background_htiled(bg_hintergrundbild,view_xview[0]/1.15,view_yview[0]/1.15)


    Soweit so gut. Klappt genauso, wie ich es will. Vorallem mit mehreren Background-Ebenen (in verschiedenen Tempi) eine wunderschöne Sache (Pseudo-3D-Effekt). Weiters wird der Hintergrund nahtlos aneinandergereiht (horizontal gekachelt).

    Nun aber möchte ich dasselbe VERTIKAL haben. Dh. der Hintergrund soll in einem bestimmten Level vertikal mitscrollen. Im Chat gab man mir bereits den Hinweis, "width" durch "height" zu ersetzten, was ich auch getan habe. Somit sehen die zwei Codes folgendermassen aus:

    Script namens "draw_background_vtile"

    bg_height = background_get_height(argument0);
    for(c = 0; c < ceil(room_height/bg_height); c+=1) {
    draw_background(argument0,((argument1 mod bg_height) - bg_height) mod bg_height + (bg_height * c) , argument2);
    }


    und eben wieder für das Level (Beispiel):

    draw_background_vtiled(bg_hintergrundbild,view_xview[0]/1.15,view_yview[0]/1.15)


    Das Traurige an der Sache ist nur; endet die untere (oder auch obere) Seite des Hintergrundbildes, wird es nicht erneut angereiht. Also kein vertikaler Kacheleffekt.

    Ich steh total auf der Leiter. Natürlich ist der Horizontal-Code (bis auf die Tempogeschwindigkeiten) nicht von mir. Weil ich wie gesagt ein bekennender Noob bin.
    Bitte helft mir, da ich sonst nicht weiter machen kann. Was muss ich tun, damit das Hintergrundbild vertikal wiederholt wird?

    Danke vielmals und schöne Grüsse,
    Kht.

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

  • Soweit ich auf die schnelle sehen kann, könnte es daran liegen, dass du im zweiten wie im ersten Code, die x-position berechnest, die y position nur aus dem argument2 abliest. probier es vielleicht mal so:

    GML-Quellcode

    1. bg_height = background_get_height(argument0);
    2. for(c = 0; c < ceil(room_height/bg_height); c+=1) {
    3. draw_background(argument0, argument1,((argument2 mod bg_height) - bg_height) mod bg_height + (bg_height * c) );
    4. }
    “Computers are good at following instructions, but not at reading your mind.” (Donald Knuth)

    Ich schreibe mit Neo.
  • Wie gut, dass ich den Thread - so wie man es normalerweise tut - nicht als gelöst gekennzeichnet habe...

    Denn nun wüsste ich gerne, was ich tun muss, damit der Hintergrund (bzw. beide Hintergrund-Ebenen) horizontal UND vertikal mitscrollt...
    Natürlich ebenfalls gekachelt - auf x- und y-Achse.
    Habe einiges probiert, bin aber nicht dahintergekommen...

    DANKE FÜR JEDE ANTWORT.