"Innere Farbe" anders als außen

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

  • "Innere Farbe" anders als außen

    Hallo,

    wie soll iches am besten schildern.. ich lasse oben und unten tunnelartig Objekte erstellen und möchte dazwischen einen Hintergrund haben und außen bspw. Schwarz.
    Hier zur Veranschaulichung:


    Mein erster Ansatz war, von den oberen Blöcken die Position zu nehmen und ein Rechteck mit der Breite sprite_width und der Höhe 0 bzw das untere mit der Höhe room_height zeichnen zu lassen.
    Allerdings gibt es 2 Probleme:
    - Siehe rote/grüne Striche, je nachdem wie ich es zeichnen würde (ob innen oder außen), diese Kurven würden ich sag mal übergezeichnet werden, sprich es würde aussehen, als hätte man den Lippenstift verwischt.
    - Es scheint mir nicht performant zu sein, war aber grad die performanteste Lösung, welche mir eingefallen ist

    Hat jemand eine Idee wie ich das realisieren könnte?
    Ich könnts diese Abschnitte mit einen Tileset erstellen lassen, was quasi exakt die Form des Tunnels hat, allerdings müsste ich dann für jeden Abschnitt, den ich erstellen lasse ein großes Tileset verwenden. Was am Ende auch unnötig mehr MB für die APK bedeuten würde
  • Hmm. Ich würde mit 2 ds_grids arbeiten. Aber nicht die objekte dann ins grid speichern sondern ganz weg lassen und nur den blocktyp 0 = nix 1 = stein etc reinspeichern. Ins zweite könntest du dann die rein grafischen Sachen reinspeichern, zB mit einem simplen floodfill algo. Kollisionen kannst du auch ohne Objekte checken an xx * blockbreite und yy * blockhöhe.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Das Problem bei DS Grids ist jedoch, dass ich kein Hspeed haben kann. Das hätte ich vielleicht auch noch dazusagen sollen, die Objekte bewegen sich nach links und ich habe einen begrenzten Raum, wo die Abschnitte zufällig nach einer bestimmten Zeit erstellt werden.
    Oder gibt es mit DS Grids eine Möglichkeit das auch zu realisieren? Ich habe bisher nur sehr sehr wenig damit gearbeitet :D
  • Schaue dir mal Primitives an.
    Dabei würde dann trianglestrip wahrscheinlich am besten sein.
    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
  • Also nicht alle. Ich habe ein Objekt in der Mitte, welches allerdings unabhängig von dem Rest ist, die restlichen Blöcke bewegen sich nach links.

    Edit:

    Ich habs jetzt mal mit Primitives versucht. Ich weiß nicht, ob ich die Funktion falsch verstanden habe, ich habe Eckpunkte genommen und diese in Variablen gespeichert und mit einer for-Schleife dann das Ding gezeichnet, ich habe mal die Eckpunkte rot markiert und die Linie, welche ich mir erhoffe Gelb:


    Create:

    GML-Quellcode

    1. xx[0] = 32;
    2. xx[1] = 128;
    3. xx[2] = 128;
    4. xx[3] = 80;
    5. xx[4] = 80;
    6. xx[5] = 32;
    7. yy[0] = 32;
    8. yy[1] = 32;
    9. yy[2] = 128;
    10. yy[3] = 128;
    11. yy[4] = 80;
    12. yy[5] = 80;
    Alles anzeigen


    Draw:

    GML-Quellcode

    1. draw_set_color(c_black);
    2. draw_primitive_begin(pr_trianglefan);
    3. for(i = 0; i < 6; i += 1) {
    4. draw_vertex(xx[i], yy[i]);
    5. }
    6. draw_primitive_end();


    Ich glaube damit kann ich es auch nicht machen.
    Mit einem Trianglestrip komme ich leider auch nicht zum gewünschten Ergebnis.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von icqgamer ()

  • Grid wäre das nächste was ich probieren würde, dann würde ich auch endlich mal da ein wenig reinkommen.
    Wie sieht es aber dann mit der Genauigkeit & Performance aus? Man müsste ja jede Step die Koordinaten verändern von jedem Objekt.
    Und wenn ich verschiedene Parts habe, müssten diese an den vorherigen anknüpfen, so dass man als Spieler gar nicht merkt, dass der Part zu Ende ist.

    Vielleicht noch eine nützliche Info: Ich lade die verschiedenen Abschnitte bisher über eine Datei, wo ich die Objekte und deren Positionen gespeichert habe, damit ich kein Script voll habe mit Instance Create...
    Wenn du Zeit hast und ein Example basteln könntest mit 4 Blöcken, welche sich nach links bewegen, wäre ich dir sehr dankbar.

    Noch eine Frage am Rande, ich müsste ja für jeden Abschnitt eine neue DS-Liste erstellen, oder dachtest du mehr, dass die Positionen ausi überschrieben werden mit dem nächsten Wert und jede Position dann einen nach links rückt?
  • Für den Terrain brauchst du garkeine Objekte mehr, das macht es ja auch so schnell, die ersetzt du einfach durch einzelne werte oder aber ein buffer/Liste wenn die blöcke noch andere Eigenschaften haben sollen. Du malst dann ja nur den Teil der Strecke der im View zu sehen ist, also verschieben muss man nichtsder spieler kann kollidieren indem du die Zellen überprüfst welche von dem sprite überlappt werden. Ich denke das für deine Anwendung ein einmaliges laden des grids aus einer datei zu beginn ausreicht und das grid nicht zu groß wird aber für endlose Anwendung kann das ganze ja auch gechunkt werden
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Ich weiß grad nicht, ob ich das ganze richtig verstehe. Aber mein Spieler-Objekt bewegt sich nur mit vspeed nach oben und nach unten, quasi so wie bei Flappy Bird. Wenn ich den Grid-Blöcken dann die Eigenschaften vergebe, dann sind sie ja nur an einer Stelle und der Spieler geht nur nach oben und nach unten und kommt nicht voran.
  • Ich habe heute eher keine Zeit, kann dir aber mal ein Beispiel mit Primitiven machen.
    Meiner Meinung nach sind die einfacher und performanter als Grids.

    Edit: so kannst du dem Background auch eine Textur geben.
    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
  • Du kannst doch einfach eine Variable für xpos anlegen. Die erhöhst du pro step und multiplizierst mit den grid koordinaten. Du verschiebst das grid dadurch jeden step ein stück mehr nach links und malst dann halt was im view ist.
    |0 X X|...0...X...
    |0 0 0|...0...X...
    |X X 0|...X...0...
    =>
    |X X 0|...X... usw.
    |0 0 0|...X...
    |X 0 X|...0...
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: