Splitscreen mit Vordergrund

  • GM 8
  • Splitscreen mit Vordergrund

    So, nachdem ich jetzt einen guten Lösungsansatz für meine coop Idee habe, wollte ich mich noch an etwas anderem versuchen:
    Es geht um den Splitscreen Modus.
    Das eigentliche Problem ist aber nicht der geteilte Bildschirm, sondern ein darüber gelegter Vordergrund.

    Folgendes:
    Ich habe drei views und ein Vordergrund Bild. View eins ist sichtbar falls die Distanz vom ersten Spieler zum Zweiten kleiner ist als 500 ist.
    Ist die Distanz größer als 500, wird view eins deaktiviert und view zwei plus drei aktiviert.
    Hier der Schnipsel dazu:

    GML-Quellcode

    1. if (gamepad_exists(2)) {if (distance_to_object(obj_female) > 500) {view_visible[0]=0; view_visible[1]=1; view_visible[2]=1; } else {view_visible[0]=1; view_visible[1]=0; view_visible[2]=0; }}


    Aber wie bekomme ich jetzt auf zwei gleichzeitig laufende views einen Vordergrund(Vignette) gemalt?
  • Hier ein kleiner Ansatz:

    GML-Quellcode

    1. if (view_current == 1)
    2. // Zeichne auf View 1
    3. else if (view_current = 2)
    4. // Zeichne auf View 2


    Du musst also deinen Vordergrund nur auf beiden Views zeichnen.

    © 2008 by Teamgrill Productions
  • Vielen Dank.
    Der Code sieht nun so aus und funktioniert wunderbar:

    GML-Quellcode

    1. if (view_current == 1) {draw_background_stretched(bg_vignette,view_xview[1],view_yview[1],view_wview,view_hview); }else if (view_current == 2) {draw_background_stretched(bg_vignette,view_xview[2],view_yview[2],view_wview,view_hview); }else {draw_background_stretched(bg_vignette,view_xview[0],view_yview[0],view_wview,view_hview);}

    (warum wird mein code hier ohne umbruch gezeigt?)

    Nun noch eine kleine weitere Frage. Um die beiden views besser auseinanderhalten zu können,
    würde ich gerne eine Trennlinie mit einbauen. Wie könnte man das umsetzen?
  • Würde ich gleich machen. Einfach auf der rechten Seite des Linken Views eine Linie drawen und das gleiche auf der anderen Seite des anderen Views. Einfach in die view_current Abfrage miteinbauen.

    © 2008 by Teamgrill Productions
  • ...oder die zweite View nicht gleich an die erste View setzen.
    Also der X-Koordinate bei Port of View höher stellen (bei der zweiten View) als die Breite des ersten Views.


    meine Schnecke i@________________________________________________________________________________________
    bitte nicht drauf treten!
  • Und wieder einmal ein nettes Dankeschön für die Lösungsvorschläge :)
    Ich habe es wie folgt umgesetzt:

    GML-Quellcode

    1. if (view_current == 1) {draw_background_stretched(tiled_line,view_xview[1],view_yview[1]+449,view_wview, 2); }else if (view_current == 2) {draw_background_stretched(tiled_line,view_xview[2],view_yview[2],view_wview, 2); }



    Da wäre noch eine Kleinigkeit: Ist es möglich ein fadeIn/fadeOut darüber zu legen?
    Sodass der Splitscreen nicht allzu rau auftritt. Das wäre die Krönung.
  • Naja, der Splitscreen sollte nicht einfach so von 0 auf 1 da sein sondern etwas "geschmeidiger" erscheinen.
    Das Problem mit der Trennlinie hättest du übrigens auch mit draw_line lösen können (erspart dir den extra Hintergrund)
    Der Hintergrund ist bei mir nur 1x1 Pixel groß und wird lang gezogen. Läuft es mit draw_line denn flüssiger,
    oder hat das keine Auswirkungen auf die Framerate?
  • Du könntest die Viewpositionen gleichsetzen und die Views dann langsam auseinanderbewegen, wenn ich das richtig verstanden habe.
    Im Fall Trennlinie wirkt sich deine Variante nicht unbedingt auf die Performance aus, ist allerdings nicht die schöne Art, wenn es nur um eine einfache Linie geht.

    © 2008 by Teamgrill Productions
  • Ja, das wäre eine Idee. Mir fällt darauf auch noch etwas anderes ein.
    Ich würde die beiden Views lieber mit schwarzer Farbe ein und ausblenden.
    Würde ich also einen schwarzen Vordergrund über die Views legen,
    wie blende ich den dann langsam aus?
    Oder ist es gar möglich einen "room transition" über die Views zu legen?

    Gut, das nächste mal wird das dann mit draw_line gemacht :P
  • Hier wieder: Um einfach schwarz ein/auszublenden zeichnest du einfach in dem Objekt, das über allen anderen liegt mit draw_rectangle ein schwarzes Rechteck und setzt mit draw_set_alpha die entsprechende Transparenz.

    © 2008 by Teamgrill Productions
  • Benutzer online 1

    1 Besucher