Jump to content
Unity Insider Forum

Score mit Grafiken


An2435

Recommended Posts

Ich habe die Ziffern 0 bis 9 als Grafiken und möchte sie ausgeben.
Wie stelle ich das am besten an?
Zerlege ich meinen Punktestand und hole mir dann den Spritenamen aus einem vorher angelegten Array,
setze dann Prefabs und zerstöre sie nach jeder Erhöhung wieder?

Oder baue ich mir einen Font wie ich das sonst für HTML mache?


Bei ersterem lerne ich wie es geht, also versuche ich es.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das wäre eine Möglichkeit mit 50 Prefabs. :)

Alternativ wird das jetzt länger wie der ganze Rest vom Script.

 

GameObjects für Ziffern0 bis 9 in array 0-9
Punktestand in String umwandeln der vorlaufende Nullen erhält, also 00123 für 123 Punkte.
Dann den String zerlegen und von 0 bis 4 den Wert aus dem Ziffernarray holen (wo 0 bis 9 jeweils drin sein kann)
Und jetzt würde ich gerne 0 bis 4 ein neues Prefab erstellen lassen, aber ich scheitere daran, dass ich keine Variable setzen darf, sondern den Namen des GameObjects setzen muss.
Die GameObjekte heißen ja "Ziffer0 bis Ziffer9";  irgendwie muss das gehen, oder?

 

GameObject temp = Instantiate(VARIABLE, new Vector3(2 + i * 0.5f, 15f, 0), Quaternion.identity);

Ich kann natürlich fünf eine Schleife mit 10 Möglichkeiten durchlaufen:

wenn ziffernspeicher_zahl = 0, dann
GameObject temp = Instantiate(Ziffer0, new Vector3(2 + i * 0.5f, 15f, 0), Quaternion.identity);

else wenn wenn ziffernspeicher_zahl = 1, dann
GameObject temp = Instantiate(Ziffer1, new Vector3(2 + i * 0.5f, 15f, 0), Quaternion.identity);

aber das will doch keiner.

Die Frage gibt es öfters, die gefunden Antworten verstehe ich leider nicht.

 

Ein Font wäre viel einfacher, ich will ja lernen wie ich das so nachbaue wie vorgegeben, eben mit Ziffern aus 1983 für den Punktestand. :)

 

 


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb An2435:

hole mir dann den Spritenamen aus einem vorher angelegten Array,

Warum den Namen, wenn du dir auch direkt das Sprite holen kannst?

public Sprite[] sprites; // Hier die Sprites in aufsteigender Reihenfolge (0, 1, 2, ...) reinziehen

 

vor 5 Stunden schrieb An2435:

setze dann Prefabs und zerstöre sie nach jeder Erhöhung wieder?

Ne, lass deine Objekte lieber leben und ändere einfach den Sprite, den der SpriteRenderer anzeigt:

public SpriteRenderer[] renderers; // Hier die SpriteRenderer-GameObjects von klein nach groß (Einser, Zehner, Hunderter, ...) reinziehen
public void SetNumber(int number)
{
  for (var i = 0; i < renderers.Length; i++)
  {
    if (number > 0)
    {
      renderers[i].sprite = sprites[number % 10];
      number /= 10;
      renderers[i].enabled = true;
    }
    else
    {
      renderers[i].sprite = null;
      renderers[i].enabled = false;
    }
  }
}

Das mit den öffentlichen Variablen geht später schöner, aber soll ja erstmal funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich definiere zehn Sprites.
Ich definiere 5 GameObjects.
Dann tausche ich die Sprites aus?

Hmm, ich hatte jetzt an folgendes gedacht. Wir starten sowieso mit 00000, also erwecke ich fünf Prefabs vom GameObjekt Ziffer0
und gebe diesen je einen Namen Stelle0 bis 5.
Dann tausche ich nur den Sprite des Prefabs x [0|4] mit dem SpriteName Name[0|9] je nach Ziffer aus.

-----

Zur Laufzeit habe ich die GO Score0 bis Score5 als Copy des Prefabs von GO Ziffer0; warum auch immer muss ich erst ein Prefab machen, das geklont wird, sonst klappt es nicht.

Ok, ich müsste die Sprites sowieso alle laden, darum willst Du sie über public holen.
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist sehr lieb von Dir. Danke.
Wobei ich immer das will, was ich nicht verstehe.

Ich kann die zehn Sprites reinziehen in public [] oder alle laden. Ok.
Ich kann fünf GO anlegen für die fünf Stellen oder fünf Prefabs mit Namen machen <= hier fehlt mir jetzt noch der Zugriff, aber ich suche. :)
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe mich schlecht ausgedrückt.

Ich habe jetzt Ziffer0 als GO, davon eine Prefab, dieses in einer public gespeichert.
Im Script erstelle ich fünf Kopien mit Namen Score0 bis Score5; diese fünf möchte ich anhand ihres Namens finden und dann denn zugehörigen Sprite ändern.
(Es geht mir nicht darum, dass das Spiel nachher läuft, sondern, dass ich alle Wege verstehe. Wie z.B. Initieren mit Name in Variable statt nur Namen, was vorhin nicht geklappt.)

Und darum, dass ich beide Wege verstehe

Sprites in public ziehen oder Sprites laden (mit Unterschied ob Single oder aus Multi)
Oder Ziffern in public legen oder fünf Prefabs mit Namen machen.

 

Und war da nicht was mit Serialization bei public arrays?
habe jetzt Fehler ... suche ...

 


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um an mein array mit den Ziffern zu kommen, mache ich am besten das?

stellen string
punkte int

stellen = punkte.ToString();
char[] array = stellen.ToCharArray();
 

Fehlen noch die Nullen oder aber:

für 0 bis 4,
nimm Ziffer, wenn Wert > 0,
sonst 0

Somit kann ich mir das Anfügen von Nullen vorne sparen.

 


 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb An2435:

anhand ihres Namens finden

Das ist immer ein schlechter Ansatz. Ich kann nicht sagen "der falsche", da es funktionieren kann, aber es ist immer eine schlechte Idee.

Wenn du mit einem Objekt arbeiten willst, das Instantiate für dich erzeugt hat, dann nutze den Rückgabewert von Instantiate:

var enemy = Instantiate(enemyPrefab, ... );
enemy.GoTowards(player); // nur so als Beispiel

Wenn du nicht nur sofort, sondern auch später mit dem Objekt arbeiten willst, hilft dir eine private Variable:

private Enemy enemyInstance;
enemyInstance = Instantiate(enemyPrefab, ... );

und dann an beliebiger Stelle

enemyInstance.DoStuff();

Wenn du jetzt mehrere Objekte initialisierst, dann hilft entsprechend ein Array:

private Enemy[] enemyInstances;
// Erzeuge 5 Gegner
for (var i = 0; i < 5; i++)
{
  enemyInstances[i] = Instantiate(enemyPrefab, ... );
}

 

vor 3 Minuten schrieb An2435:

Um an mein array mit den Ziffern zu kommen, mache ich am besten das?

Siehe meine Lösung.

% macht Restrechnung, "% 10" gibt die Einserstelle zurück, "/ 10" schneidet die Einerstelle ab.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, das finden fühlt sich komisch an, das haben ist besser. Bisher hatte ich die Namen in ein Array gepackt, aber ich kann auch die Objekte also direkt behalten, ok.
Das probiere ich noch, und wenn das Bett droht, tausche ich zu Deiner Lösung um. :)

private Enemy[] enemyInstances;

ist vom typ GO?

private GameObject Enemy[] enemyinstances; ?

Nein, geht/ging nicht. Darum wollte ich den Weg über die Namen gehen, da ich Strings speichern konnte.
---

geht doch, prima

    private GameObject[] meineZiffern;

    void Start()
    {
        // setze Score mit 00000
        for (int i = 0; i < 5; i++)
        {
            meineZiffern = Instantiate(ziffer, new Vector3(2 + i * 0.5f, 15f, 0), Quaternion.identity);
            meineZiffern.name = "Score" + i.ToString();
            meineZiffern.tag = "ZI";
        }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Enemy ist hier stellvertretend für eine Komponente, die das Prefab hat. Statt "GameObject" einen Komponententyp anzugeben, bedeutet zwei Dinge:

  1. Man kann nur noch GameObejcts (inkl. Prefabs) in das Feld im Inspektor ziehen, die diese Komponente haben.
  2. Die von Instantiate zurückgegebene Referenz zeigt nicht auf das GameObject, sondern auf die Komponente der erstellten Instanz.

Statt

public GameObject prefab;
var instance = Instantiate(prefab, ... );
var instanceEnemyComponent = instance.GetComponent<Enemy>();

kann man also machen:

public Enemy prefab;
var instanceEnemyComponent = Instantiate(prefab, ... );

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Müssen die Kopien eines Prefabs abhängig von seiner Position liegen?

Ich habe einen Zielfrosch (17/13) und seine Kopie (0/0) und habe eben erst bemerkt, dass sie aufeinander liegen. Die tatsächlich gebrauchten Zielfrösche werden im Script gemacht und gelöscht, wenn ich sie nicht mehr brauche. (Evtl. auch nicht gut? Aber funktionierte vorhin. :)
Von Referenzieren referenzierter Referenzen habe ich leider immer noch keine Ahnung, aber ich bleibe dran.


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe meine zehn Sprites von 0 bis 9 in []sprites geschoben.
Ich habe Prefabs von Ziffer0 erstellt und in [] Renderers gezogen.

SetNumber läuft für 0 bis 4, fünf mal
wenn die übergebene Ziffer > 0 ist, wird der Wert Sprite vom Renderer auf %10 gesetzt?
Wenn ich das richtig verstehe:

Renderer hat Eigenschaften wie Sprite, Color usw.
Ich hätte erwartet, dass man nun die Sprites anhand ihrer Namen tauscht.
Als Renderer.Sprite="gui90" für 0, gui91 für 1 usw.
Da wir die Sprites aber im array Sprites haben, soll man nun array sprites(x) zuweisen?
Ok, dann passt das vielleicht?
renderers.sprite = sprites[number % 10];
ich bekomme den Rest von 0-9/10 also 0-9 beim einer,
dann ziehst Du die letzte Ziffer ab
und von vorne.

 

Was mich völlig nervt, ist dass es ständig Fehler ohne Zeilenangabe gibt.
Bin ich nicht gewohnt. Muss man damit leben oder kann man da was ändern?
Beim Interpreter hilft stets ein "bin bei 2, bin bei 3 ... :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

            else
            {
                //renderers.sprite = null;
                renderers.sprite = sprites[0];
                //renderers.enabled = false;
            }

Das muss geändert werden, damit der Zähler mit 00000 anfängt.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nächster Punkt. Im Moment folgt ein destroy über das gemeinsame Tag, wenn alle fünf Frösche zuhause sind, damit sie wieder verschwinden. Es würde ausreichen, sie unsichtbar zu machen oder auf eine andere Ebene zu verschieben bzw. Order in Layer zu verändern.

...

Aktuell wird jeder ZielFrosch erstellt, hausnummer ist einer von 5 Slots frü den Frosch ganz oben. Sie liegen auf 1,4,7,10,13, darum 1+hausnummer*3 für die x-Koordinate

// erstelle prefab für Hausnummer
GameObject temp = Instantiate(zf, new Vector3(1 + hausnummer * 3f, 13.5f, 0), Quaternion.identity);
temp.name = "ZF" + hausnummer.ToString();
temp.tag = "ZF";
 

Analog zum Vorschlag mit den Ziffern, wäre es dann auch besser die fünf Prefabs in ein public array zu ziehen?
Und dann nur zu verschieben (wobei ich den Sort Layer mal reinnehmen könnte, dafür ist da? bzw. lese ich das gleich mal nach.)

 

 

 

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Fünffachpost! Dolle Wurst! Was ist eigentlich in letzter Zeit los hier! Da ist ein Bearbeiten-Button unter deinem Beitrag, bitte benutze ihn, um etwas nachzutragen!

vor 1 Stunde schrieb An2435:

renderers.sprite = number % 10;

Der Typ int kann nicht in Sprite konvertiert werden.

Das hab ich oben mal korrigiert.

 

vor einer Stunde schrieb An2435:

Analog zum Vorschlag mit den Ziffern, wäre es dann auch besser die fünf Prefabs in ein public array zu ziehen?

Es sind keine fünf Prefabs im Spiel. Weder bei der Variante, die ich vorgschlagen habe, noch bei der, die du jetzt scheinbar verfolgst.

Ich kann dir da irgendwie nicht mehr richtig weiterhelfen, weil du darauf bestehst, Dinge mit GameObject-Namen zu machen. Das ist kein guter Weg.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Neues Thema im Thema = Neuer Beitrag?
 

Die Sprites für den Punktestand sind mit kleinen Änderungen, siehe oben, so gemacht wie vorgeschlagen.
 

Die Meldung "Start" habe ich analog als Renderer bezogen und lasse sie nach vier Sekunden ausblenden.
Beim Levelstart bekommt sie wieder 4 Sekunden.

Das gleiche folgt morgen für die Spielzeit, die von x abwärts läuft. Ist das Level beendet, wird die Restzeit eingeblendet bis das nächste Level losgeht, dann folgt wieder Start.
Dazu kommt Zeit minus Restzeit mal Punkte.


Die fünf Zielfrösche habe ich derzeit noch gelassen, da sie nichts machen müssen, wechsel ich das morgen auch zu Renderern statt GO plus initierung?
Am Levelende müssen sie dann einmal augenzwinkernd ersetzt werden, bevor sie wieder verschwinden.


Die Anzeige des Levels erfolgt nur bis 15 durch Icons, auch die habe ich als Gameobject angelegt. Das wird 15 mal initiert.
Soll ich das anders machen? (Jedes Level fügt ein Icon hinzu bis es 15 sind.)

Wenn was nur angezeigt wird, aber eine wachsende Anzahl hat, nimmt man keine GO, sondern?
 

Danach geht es zum ersten Mal an Kollisionen. Bei den Autos gibt es echte Kollissionen..
Bei den Baumstämmen ist es anders herum, man stirbt wenn man sie nicht trifft.
Und bei den Ziellöchern ist es wieder wie bei den Autos.

Fliegen fehlen auf dem Baumstamm und im Haus.
Schlangen, Krokodile und Ratten? Wobei die Krodile dann eine Box kriegen für den Kopf und eine für den Körper, falls das geht.
Körper = leben, Kopf  = tot, Rest sowieso tot.

- Dann brauche ich noch einen GameManager, den man vor dem Spiel füttern kann, ich will da einige "Schrauben" haben.
- Mehr Musik muss noch rein, ich habe nur einen Teil der originalen FX.

😞

(Hier mit dem Smilie hatte ich gerade richtig Ärger, ich musste viele Pfeiltasten klicken um danach bei der Änderung weiterschreiben zu können.)

 

Gute nacht und vielen Dank. :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 17 Minuten schrieb An2435:

Neues Thema im Thema = Neuer Beitrag?

Ne, neues Thema = neues Thema :)

vor 22 Minuten schrieb An2435:

wechsel ich das morgen auch zu Renderern statt GO plus initierung?

Ganz allgemein ist es immer eine gute Idee, Dinge nicht programmatisch zu generieren, wenn sie einen überschaubaren Rahmen haben. Du hast fünf, und immer nur fünf gleiche Objekte? Dann mach dir ein Prefab und ziehe es fünfmal in die Szene. Dann siehst du schon vorher, wo sie sein werden und vermeidest Fehler, die davon kommen können, dass für denselben Zweck Code existiert.

Noch genereller: Wenn du mit einem Framework, einem Plugin oder einer Engine arbeitest, dann arbeite immer mit dem Ding zusammen, nicht dagegen an. Unity bietet dir einen überaus mächtigen Editor, mit dem du Szenen erstellen kannst. Du siehst, wie das aussieht und der Editor hat jede Menge Tools, um dich dabei zu unterstützen. Es wäre mehr als nur Verschwendung, das links liegen zu lassen und stattdessen einen Haufen Code für etwas zu schreiben, das bereits bestens funktioniert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe:

Frosch/Spieler=Rigid, daran hängt Script Movement, das aktuell noch die meiste Arbeit macht.


Einen Zielfrosch als GO, dazu Prefab,
=> jedesmal, wenn ein Frosch im Ziel ist, wird eine Instanz erstellt und angezeigt,
=> ist das Level beendet, werden alle fünf Instanzen über das Tag "ZF" zerstört.


Das Lebenicon ist ein GO, hat ein Prefab, es wird maximal siebenmal neu erstellt, bei Verlust wird das letzte zerstört.
Alternativ baue ich sieben Prefabs, setze sie in ein array wie gestern die Ziffern.


Das Levelicon ist ein GO, hat ein Prefab, das maximal 14 mal erschaffen wird, um 15 zu haben, Prefab 1 steht fix in der Szene.
Beim Spielneustart werden alle 14 zerstört. (Muss ich noch machen)
 

Die Ziffern für den Punktestand sind 10 Sprites und 5 Prefabs von Ziffer 0, sie stehen in der Scene.
=> wie gestern (oben) besprochen, wechseln hier die Sprites für den Zählerstand.


Einblendung Start läuft für jeden neuen Frosch vier Sekunden lang. Sprite wird als Renderer angehängt, update zieht Deltatime ab bis 0, dann wird Sprite.enable=false gesetzt. Beim jedem Levelanfang wieder auf 4/true.


Fehlend/zu machen
Baumstämme
Blätter a) normal b) Animation und Wechsel begehbar/nicht begehbar
Krokodile a) im Wasser b) im Zielfeld
Schlangen a) auf Wiese b) auf Baumstämmen
Ratten/Bieber
Fliegen a) auf Baumstämmen b) im Zielfeld;
Fliegen treffen und tragen, Punkte erst im Ziel
Fliegen im Ziel treffen und Punkte

Verschiedene Autos

Kollision
Auto normal
Wasser, aber nicht, wenn man auf a) Baustamm b) Blatt c) aber tot, wenn Blatt unter Wasser
Wand oben, besetztes Zielfeld oben
 

Logik beim Leveln (Autos schneller, Anzahl Schlangen usw.)
 

Optionen mit vielen Schrauben

 

- - - - - - - -

Laut einem Buch wird ein Sprite in die Szene gezogen, dann ein Prefab erstellt, dann das Sprite gelöscht.
Ist das der richtige Weg? Ich meine, dass ich deshalb 1. Sprite reinsetze, dann Prefab erstelle und nur mit dem Prefab als GO oder zum instanzieren arbeite bzw. weil es mit dem Sprite selbst nicht geklappt hat. (Ich lasse den Ursprungssprite aber erstmal in der Szene, löschen kann ich das immer noch)


Ich sehe folgende Fälle, weiß noch nicht wo es wie sein soll:

a) Spieler = rigid
b) Sprites als GO mit Colider für Baumstämme, Schlangen, Monster, Feinde
=> braucht man mehr gibt es Prefabs, die kann man
==> im Script instanzieren
==> per Hand und Maus erzeugen und in den Ordner prefabs/Unterordner werfen, dann z.B. in ein public array setzen

c) Sprites als GO/Prefabs manuell erstellt/instanziert als reine Anzeige zum einblenden
=> erzeugt/zerstört
=> erzeugt m/i und nur ausgeblendet

d) GUI-Elemente nutzen? Habe ich noch nicht angeschaut. Sinnvoll für Icons für Level/Anzahl Leben?

 

Zahlen hierzu am Beispiel:

  • Frosch/Spieler 1
  • Zielfrösche 5, am Levelende müssen Sprites im Zeitverlauf jeweils ersetzt werden, Frosch zwinkert.
  • Levelicon, maximal 15
  • Lebensicon (keine Ahnung, muss Frogger spielen, auf max. 7 setzen und sehen, ob der achte erscheint bzw. wie viele erscheinen.) Ich fange jetzt mit max. 7 Stk. an.
  • Einblendung Start (hier nur Sprite als GO, wird zum Levelstart 7 Sekunden eingeblendet)
  • Einblendung Restzeit (ein Sprite für Text plus Leerraum, oben dran Ziffern rechtsbündig
  • Einblendung Zeit; es gibt dazu drei Sprites breit, kurz, ganz kurz; der Zeit geschuldet? Müsste man mit einem optisch gleich machen können.


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb An2435:

jedesmal, wenn ein Frosch im Ziel ist, wird eine Instanz erstellt und angezeigt,

Wie gesagt: Warum nicht von Anfang an in der Szene haben, nur halt unsichtbar?

vor 3 Stunden schrieb An2435:

ist das Level beendet, werden alle fünf Instanzen über das Tag "ZF" zerstört. 

Das sind wieder Strings. Ich benutze in meinen Projekten gar keine Tags mehr, und das funktioniert bestens. Aber eins nach dem anderen.

vor 3 Stunden schrieb An2435:

Alternativ baue ich sieben Prefabs, setze sie in ein array wie gestern die Ziffern.

 

vor 3 Stunden schrieb An2435:

Prefab 1 steht fix in der Szene.

Du musst dir unbedingt die richtige Terminologie angewöhnen. Ein Prefab ist ein GameObject in den Assets. Wenn du Instantiate(prefab) machst, kommt da nicht ein neues Prefab heraus, sondern eine neue Instanz dieses Prefabs. Du hast also niemals Prefabs in der Szene und du erstellst im Spielverlauf auch keine neuen Prefabs.

vor 3 Stunden schrieb An2435:

Beim Spielneustart werden alle 14 zerstört.

Das ist einfach: Lade die Szene neu. Sie wird dadurch auf ihren Ausgangszustand zurückgesetzt.

vor 3 Stunden schrieb An2435:

Einblendung Start läuft für jeden neuen Frosch vier Sekunden lang. Sprite wird als Renderer angehängt, update zieht Deltatime ab bis 0, dann wird Sprite.enable=false gesetzt.

Klingt nach einem sehr guten Anwendungsfeld, um sich in Coroutines einzufuchsen, aber so geht's natürlich auch.

vor 3 Stunden schrieb An2435:

Spieler = rigid

Das ist wieder das mit der Terminonlogie.Schreibe lieber das ganze Wort "Rigidbody", sonst verwirrst du alle, die das lesen.

vor 3 Stunden schrieb An2435:

braucht man mehr gibt es Prefabs, die kann man

Ich hab damals ein Forgger implementiert. Da hatte ich X viele Baumstämme in der Szene, die sich konstant bewegt haben. Haben sie den sichtbaren Teil des Spiels verlassen, wurden sie einfach auf die andere Seite teleportiert. Damit spart man sich das Neu-Erstellen und Löschen und hat, wieder dasselbe Thema, einen besseren Überblick über das, was in der Szene passiert.

vor 3 Stunden schrieb An2435:

GUI-Elemente nutzen? Habe ich noch nicht angeschaut. Sinnvoll für Icons für Level/Anzahl Leben?

Das UI-System ist ganz nett. Es braucht etwas zusätzliche Einarbeitung, die sich aber lohnt. Es bietet vor allem Features für Layouting und macht UIs auch bei verschiedenen Bildauflösungen brauchbar.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok. Angekommen. Wir nutzen nur Instanzen von Prefabs.
Autos und Co wollte ich durchlaufen lassen und dann wieder auf außerhalb / rechts/links setzen.

Mit den Autos fange ich heute an

    // Autos
    int[,] autos = new int[11,5] {
        {1,2,3,4,5},
        {3,3,3,6,2},
        {4,4,3,7,3},
        {4,4,5,2,3},
        {4,4,4,8,4},
        {5,4,5,4,3},
        {3,3,3,1,2},
        {4,4,4,7,3},
        {4,4,5,7,3},
        {4,4,4,8,4},
        {5,4,5,4,4}
    };
    private int runde = 1;
    // Runde = int(level / 5) wenn % = 0, sonst + 1
    // ab Lvl 5: index = level - (runde * 5) + 5

// index 0 habe ich mal aufgefüllt, kann man auch wieder abziehen, klar.

Dies sind die Angaben aus einem Walktru;
es bedeutet 1-5 = Anzahl Autos
aber in Spalte 4 bedeutet 1-5 langsame Autos oder 6-10 schnelle Autos. (es gibt hier nie 5 Stk, aber vlt. will ich irgendwann ein anderes Schema.)
Ab Runde 6 wiederholen sich die Level 6-10, 11-15 usw.; also zähle ich die Runden zu 5 Level; und berechne damit aus Level und Runde den Array Index.

Leider habe ich bisher keine Infos gefunden wie die Wagen gesetzt werden. Ich werde also spielen bzw. die Videos anschauen müssen.
Manches verstehe ich auch nicht:

EVERY OTHER LOG IN LINE #5 A CROCODILE (was meint er nur mit jedes andere, den Videos nach meint das einfach alle?)

Zurück zu den Autos, in Runde 1 sind z.B. 3, 3, 3,1 schnelles und 3, aber ich habe keine Info wie sie gesetzt werden.
Liege ich aber richtig, dass die Festsetzung immer gleich ist?
AxxAAx mit A= Auto, x = x Pixel Abstand; sowas in der Art?

Möglichkeiten:
Baue Sprites mit Wagen: 3er, 4er, 5er für Bahn1 z.B.
dann kann ich diese aber nicht variieren (außer ich male verschiedene "3er" und "4er") und brauche dann jeweils zwei davon.
Oder ich setze wie oben sowas wie AxxAAx - dafür muss ich die Abstände mal schätzen gehen. Sollten die Level im original immer gleich sein, dann sind Schlangen die einzige Abwechslung, dann wäre der Straßenteil immer gleich zu handhaben? v,r,v,rv,l für Level 6; v,r,l,v,r,z, o.ä? - will ich gar nicht glauben, oder doch als langsamer Einstieg für den Random-Teil oben?

Ich ahne, dass ich das mi AxxAxA machen muss, dann kann man es per Option auch auf RND setzen später.

Aus oben folgt demnach, dass ich mir 5 Sprites in die Szene ziehe, jeweils ein Prefab erstelle, diese in ein array 0-4 ziehe und dann im Script die notwendigen Instanzen erstelle? Dazu brauche ich dann a) einen Lageplan

erstelle drei Instanzen und setze sie auf y = Bahn und x1, x2, x3

oder b) nimm rnd 3/4/5 von 5 und besetze mit Instanz

nebst Sonderbehandlung von Bahn 4.

 

Ob ich die bekannten Fehler auch einbauen soll? Zum Üben? Bzw. als Option mit Fehler a,b,c,d,e?

Wobei ich gerne wüsste, ob der unsichtbare Lila Frosch ein Fehler oder Absicht ist. Wohl eher letzteres, denke ich.

Wozu gibt es im Originalspritesheet eigentlich den Frosch horizontal? Konnte man damals nur spiegeln und nicht drehen? Ist er für die Froschdame auf den Balken?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...