Jump to content
Unity Insider Forum

Score mit Grafiken


An2435

Recommended Posts

vor 34 Minuten schrieb An2435:

int[,] autos = new int[11,5] {

Das ist halt wieder Code für Dinge, die man auch visuell machen kann. Warum möchtest du unbedingt blind arbeiten, wenn du auch sehen kannst, was du tust?

vor 35 Minuten schrieb An2435:

Dies sind die Angaben aus einem Walktru;

Wenn ich dich jetzt nicht falsch verstehe, heißt das, du machst ein Tutorial, das dir empfiehlt, das alles zu coden? Wenn ja, dann suche dir ein anderes Tutorial.

vor 36 Minuten schrieb An2435:

EVERY OTHER

"Every other" ist englisch für "jedes zweite".

vor 37 Minuten schrieb An2435:

AxxAAx mit A= Auto, x = x Pixel Abstand; sowas in der Art?

Bitte was?

vor 37 Minuten schrieb An2435:

Baue Sprites mit Wagen: 3er, 4er, 5er für Bahn1 z.B.

Bitte was? Langsam werden deine Sätze echt zu kurz. Folgender Vorschlag. Mach doch bitte eins nach dem anderen, und alles in seinem eigenen Thema. Wir sind ja jetzt hier nicht mehr bei der Anzeige einer Punktzahl, also mach doch für ein neues Problem ein neues Thema auf.

Und wenn du das tust, nimm dir bitte etwas Zeit, zweierlei Dinge zu tun:

  1. Beschränke dich inhaltlich auf das Wesentliche. Versuche nicht, alle aktuellen Probleme in einem Post abzuhaken, da kommt dann am Ende nix bei rum.
  2. Wenn du das Wesentliche beschreibst, bitte benutze ganze Sätze und erkläre, was du tust. Ob du's glaubst oder nicht, "Baue Sprites mit Wagen: 3er, 4er, 5er für Bahn1" ist kompletter Kauderwelsch für jeden, der nicht in deinem Kopf drin steckt. Und das tun wir eben nicht. Kommunikation ist ein extrem wichtiger Skill für Informatiker - trainiere ihn.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, vielleicht könnte man den Titel in "Anfänger baut "Frogger" nach umbenennen. :)

Angaben in welchem Level wie viele Autos fahren sollen

   // Autos
    int[,] autos = new int[10,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}
    };
 

Zitat

Das ist halt wieder Code für Dinge, die man auch visuell machen kann. Warum möchtest du unbedingt blind arbeiten, wenn du auch sehen kannst, was du tust?

Ich weiß nicht wie ich es anders speichern sollte.
Im Array oben steht folgendes:

In Level 1, siehe array(0) möchte ich je drei Autos auf der ersten Bahn, drei auf der zweiten, drei auf der dritten und ein schnelles auf der vierten und nochmal zwei auf der fünften Bahn.
Ich mag Arrays und kann damit arbeiten. Wie sollte ich diese Info anders speichern?


Soll ich zehn Szenen entwerfen und dann die Szenen 6-10 jeweils wiederholen? Meinst Du das mit visuell machen? Das ginge auch und hätte seinen Charme, klar.
Andererseits mag ich die kleinen Rätsel, die man hierbei lösen kann.

   private int runde = 1;
    // Runde = int(level / 5) wenn % = 0, sonst + 1
    // ab Lvl 5: index = level - (runde * 5) + 5

ergibt automatisch die Daten für ein Level durch das Level (int).

Und wenn ich ein neues Level anlegen wollte, müsste ich fast nur dieses Array um ein, zwei, drei Zeilen erweitern neue Szenen zu kopieren und zu ändern.

 

Nachtrag: Für all die vielen alten Spiele mit einem Hintergrund wie Frogger, Pacman und Co baut man jedes Level oder baut man nur eine Szene aus man es aus Rahmendaten? Ich würde einzelne Szenen nur bauen wollen, wenn es Instanzen von Szenen gibt, so dass ich die Mutterszene für alle Instanzen ändern kann, gibt es das, Instanzen von Szenen?

 

Walktru

war ein Hinweis auf eine Seite rund um Frogger, wo man unter anderem lesen kann wie viele Autos (Krokodile usw.) im jeweiligen Level vorkommen. Der frühere Hinweis auf ein anderes Buch (da ging es um die Steine für ein Breakout, wofür man a) GO erstellt, Prefab erstellt, GO löscht, Prefab inits macht). Diese Info habe ich einfach mal so übernommen. Das Warum fehlt noch.

 

Every other = jedes zweite. Super. Danke. Also jeweils ein Baumstamm und ein krokodil in Level 8 und 9 auf Bahn 4. (siehe Walktru)

AxxAAx steht für Autos und Abstände dazwischen. Wenn Du Dir hier z.B. ein Video anschaust, dann siehst Du für Level 1:

https://www.youtube.com/watch?v=u23kf-XBack

bei Sekunde 7, dass das Anfangsbild damit startet, dass auf Bahn zwei die Dreierfolge so startet, dass die hinteren zwei noch auf dem Bildschirm sind, während der erste schon wieder links rein kommt. Muss ich z.B. zwei Autos rein setzen (Lvl1, Bahn 5) könnte ich diese hintereinander oder mit Abstand aufstellen und abfahren lassen. Soweit ich das nicht zufällig mit geschätzten 5-7 Startpositionen mache, sondern fix vorgegeben, muss ich wieder (zehn Szenen bauen) oder in einem Array parallel zur Anzahl [] autos auch die Positionen (damit auch die Abstände) speichern. Ich kann AxA losfahren lassen oder eben AxxA; die Autos sind maximal 62 Pixel breit, belegen also zwei, sogar drei Felder und wir haben 13., die Rennwagen haben nur 32 Pixel, da gibt es also einige Variationsmöglichkeiten.


Baue Sprites mit Wagen: 3er, 4er, 5er für Bahn1 z.B.

Ich habe kurz überlegt, was ich alles machen könnte.

Beispiel: Bahn 5 mit zwei LKWs.
a) ich kann (und werde) zwei Inits erstellen, sie positionieren (geschätzte auf 8x und 13x bei 6.5 y), fahren lassen und außerhalb vom Bildschirm springen lassen. Man könnte auch
b) ein großes Sprite nehmen mit zwei LKWs drauf und davon zwei benutzen. Das war nur eine Überlegung.
c) könnte es sein, dass zwei gar nicht reichen? Das wäre der Fall, wenn 1 gerade heraus fährt, aber 3. schon reinkommt.
Wahrscheinlich muss ich hier später mein Spiel und die Arcade Version parallel laufen lassen und dabei filmen. Mal sehen.

 

Und jetzt lasse ich mal die Autos fahren, bevor die Nacht wieder herum ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nachtrag; eigentlich ist das Quark mit der Anzahl der Autos, ich sollte gleich die x-Koordinaten speichern, daraus ergibt sich dann auch die Anzahl.

In PHP lösen wir das gerne so
"1,7,13","2,5,9" usw.; dann wird kurz explodiert und alles ist da.

Ich sollte vielleicht erst sehen wie das andere machen mit dem Platzieren ... für x Level in einer Szene.

 

Jetzt habe ich mir mal das hier anschauen wollen:

https://github.com/cbpetersen/frogger-unity

Aber irgendwas habe ich wohl falsch gemacht, da scheint doch einiges zu fehlen, oder?
 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Minuten schrieb An2435:

Ja, vielleicht könnte man den Titel in "Anfänger baut "Frogger" nach umbenennen.

Nein, bitte ein Thema pro Problem. Das hat schon seine Gründe, weil wir hier eine Suchfunktion haben. Du hast doch bestimmt auch schonmal nach einem Problem gesucht, etwas gefunden und dich dann geärgert, weil die Leute, die da geschrieben haben, über etwas ganz anderes zu reden. Das hat schon seine Gründe, warum wir das hier so machen wie wir es machen. Foren funktionieren eben anders als Whatsapp-Gruppen.

vor 22 Minuten schrieb An2435:

Ich weiß nicht wie ich es anders speichern sollte.

Du nimmst das Auto-Prefab und ziehst es in die Szene. Dann platzierst du es ggf. noch etwas genauer da, wo du es haben willst und speicherst die Szene.

vor 22 Minuten schrieb An2435:

Ich mag Arrays und kann damit arbeiten.

Ich mag auch Hämmer, deshalb versuche ich nicht, damit etwas zu programmieren.

vor 23 Minuten schrieb An2435:

Soll ich zehn Szenen entwerfen und dann die Szenen 6-10 jeweils wiederholen? Meinst Du das mit visuell machen?

Nein. Du machst eine Szene und stellst die Dinge so ein, dass sie evtl erst später dazu kommen und bis dahin deaktiviert sind.

vor 24 Minuten schrieb An2435:

Und wenn ich ein neues Level anlegen wollte, müsste ich fast nur dieses Array um ein, zwei, drei Zeilen erweitern neue Szenen zu kopieren und zu ändern.

Kommt halt drauf an, ob du mit Spieleentwicklung irgendwo hin willst. Du kannst auch einfach nicht Unity benutzen und alles per Hand programmieren. Wenn du aber Unity benutzt und das nicht nur, weil dir langweilig ist, dann wäre es keine schlechte Idee, zu lernen, wie man bestimmte Dinge in Unity macht.

vor 26 Minuten schrieb An2435:

AxxAAx steht für Autos und Abstände dazwischen.

Alles klar. Fällt allerdings unter "Beschränke dich auf das Wesentliche". Frage gerne jederzeit "wie macht man dieses oder jenes in Unity", aber es ist schon etwas müßig, erstmal irgendwelche Strukturen von dir verstehen zu müssen, um raten zu können, wo dein eigentliches Problem liegt.

vor 29 Minuten schrieb An2435:

Ich habe kurz überlegt, was ich alles machen könnte.

Beispiel: Bahn 5 mit zwei LKWs.
a) ich kann (und werde) zwei Inits erstellen, sie positionieren (geschätzte auf 8x und 13x bei 6.5 y), fahren lassen und außerhalb vom Bildschirm springen lassen. Man könnte auch
b) ein großes Sprite nehmen mit zwei LKWs drauf und davon zwei benutzen. Das war nur eine Überlegung.
c) könnte es sein, dass zwei gar nicht reichen? Das wäre der Fall, wenn 1 gerade heraus fährt, aber 3. schon reinkommt.
Wahrscheinlich muss ich hier später mein Spiel und die Arcade Version parallel laufen lassen und dabei filmen. Mal sehen. 

Auch das fällt unter "Beschränke dich auf das Wesentliche". Bitte mache dir bewusst, dass wir hier nicht den ganzen Tag rumsitzen, weil wir nichts besseres zu tun haben. Leute helfen hier gerne bei Problemen, aber in einem Unity-Hilfethema ist es einfach nicht richtig, alles aufzuschreiben, was einem in den Sinn kommt. Wenn du dir Gedanken zun deinem Spiel machst, nimm ein Schreibheft in die Hand oder mache eine Textdatei auf. Ich/wir würden dir natürlich gerne mit Unity helfen, aber sich bei jedem deiner Posts erstmal durch eine Riesenmenge an völlig irrelevantem Beiwerk wühlen zu müssen macht das reichlich anstrengend.

Also bitte:

  1. Wenn du ein Problem hast, benutze die Suchfunktion um zu schauen, ob es dazu schon Themen gibt.
  2. Wenn du nichts findest, mache jeweils ein Thema pro Problem auf.
  3. In diesem Thema beschreibst du dein Problem, was du vorhast, was nicht klappt, usw., und lässt bitte deine allgemeinen Gedanken weg.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok. Demnach setze ich jeweils schon bis zu fünf Autos in eine Bahn und lasse nur fahren, was ich brauche. Ich speichere dann nur die Positionen pro Level.

Also nochmal für mich:

Packe alles in eine Szene was Du brauchst, blende es ein, wenn Du es brauchst, blende es aus, wenn es nicht gebraucht wird.

 

Erstellen und zerstören nutze ich demnach nur für den Endgegner x, weil der nur ein einziger Mal vorkommt um keine 300 Endgegner in der Szene zu haben? Nein, ich habe ihn immer da, aber wechsle nur den Sprite und seine Fähigkeiten, richtig? Ok.


Wann erstelle und zerstöre ich etwas?
Was macht man mit 100 Schuss, die durch das Bild fliegen?
Ab wann würde man grob doch nicht alles reinsetzen?
Gibt es da eine Hausnummer, die aber von den alten Klassikern wahrscheinlich nie gesprengt wird?

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb An2435:

Wann erstelle und zerstöre ich etwas?

Zum Beispiel wann immer die Anzahl der Objekte nicht im Vorfeld bekannt ist. Wenn z.B. solange Gegner erscheinen, bis ein Knopf gedrückt wird.

Das sind aber natürlich keine in Stein gemeißelten Regeln. Man kann natürlich auch die HP-Anzeige am Anfang des Spiels oben rechts per Code instanziieren, aber die Frage ist immer "Warum"? Man muss sich eben einmal bewusst machen, was der Unity-Editor ist. Es ist ein Programm, das es einem ermöglicht, eine Szene (oder mehrere gleichzeitig) zu betrachten und diese zu editieren. Die Szene wird dann gespeichert in einer Textdatei, die eben alle Objekte der Szene beinhaltet und besagt, was wohin gehört und mit welchen Komponenten und Eigenschaften. Die Engine lädt diese Datei beim fertigen Spiel und instanziiert alles diese Objekte. Es passiert also genau dasselbe wie bei einer selbst programmierten Variante. Der Unterschied ist der, dass man im Editor sieht, was man tut und immer dasselbe Initialisierungs-System benutzt wird, das seit vielen Jahren von den Leuten bei Unity gepflegt wird. Man kann also nicht nur direkt sehen, ob etwas wie gewünscht platziert ist, man verringert auch stark die Fehleranfälligkeit, die eine "Per-Hand-Initialisierung" in einem Script mit sich bringen würde.

Wenn ichn also dazu rate, kein zweidimensionales Array mit lauter schwer lesbaren Nummern darin zu verwenden sondern den Editor, dann weil ein solcher Editor nicht ohne Grund Teil jeder kommerziellen Spieleengine ist.

vor 41 Minuten schrieb An2435:

Was macht man mit 100 Schuss, die durch das Bild fliegen?

kommt drauf an. Könnten es genausogut 200 sein? Dann würde man sie erstellen und wieder löschen - dafür gibt es diese Funktionalität. Wobei ein häufiges/schnelles Generieren und Löschen von Objekten auf die Performance drücken kann und Speicherabfall erzeugt. Um das besser zu machen, würde man ein Pooling-System verwenden. Anstatt die Objekte zu löschen, werden sie damit recycelt.

vor 50 Minuten schrieb An2435:

Ab wann würde man grob doch nicht alles reinsetzen?

Das muss man von Fall zu Fall unterscheiden. So zum Vergleich: Mit den neuen Prefab-Features in 2018.3 hat sich mMn diese Grenze direkt schon wieder verschoben, denn es ist jetzt möglich, viele Dinge über normale Prefabs zu regeln, bei denen man vorher doch eher zu Instantiate gegriffen hätte. Nested Prefabs sind ein wahrer Segen :)

vor 52 Minuten schrieb An2435:

Gibt es da eine Hausnummer, die aber von den alten Klassikern wahrscheinlich nie gesprengt wird?

Nein, es gibt keine Zahlen oder so, an denen man sich orientieren könnte. Es gilt immer, die Vor- und Nachteile abzuwägen. Das geht natürlich nicht ohne ein bisschen Erfahrung mit der Thematik, aber prinzipiell geht es um das, was ich am Anfang dieses Posts geschrieben habe. Unitys gesamtes Serialisierungs-System (das Speichern einer Szene in einer Datei und das Laden selbiger im fertigen Spiel) ist genau dafür da, dass du nicht alles in Code setzen musst. Das bringt die genannten Vorteile, aber es gibt eben auch Momente, wo man mit dem System kämpfen müsste, um ein bisschen Instantiate und Destroy zu vermeiden, wo eben auch eine einzelne Zeile Code ausreichen würde.

In einem meiner aktuellen Projekte benutze ich nur an sehr wenigen Stellen selbst Instantiate. Da es zwischen einem und vier Spielern gibt, habe ich einen Spawnpunkt, der eben soviele Spielfiguren instanziiert, wie sich Spieler mit ihrem Controller angemeldet haben. Die Spielfiguren kriegen dann noch je ein Schwert in die Hand gedrückt, das ebenfalls mit Instantiate erzeugt wird. Da man sich seine Waffe aussuchen kann, ist vorher nicht bekannt, welche Sorte Schwert die Spielfigur erhalten wird, daher Instantiate. Alle Gegner, alle Schüsse, alle Explosionen laufen über mein Pooling-System. Und alles, was Teil der Welt ist, durch die Spieler sich bewegen, ist in der Szene verankert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...