Suche Menschen die meinen C#-Code kritisieren!

Als Alternative zur Factory-Klasse mit switch/case kannst du ein Array nutzen (wenn du über Indexe/Enum gehen kannst) und somit müssen auch nicht ständig neue Objekte erstellt werden. Das erfordert aber eben, dass du pro Funktion eine Klasse erstellst.

Klar kannst du auch alles in eine einzige Animationsklasse packen. Je nach Anzahl der Funktionen und Komplexität kann die Klasse halt sehr groß werden.
 
Die Factory Klasse kann sich auch einfach eine Liste von Animationen über den Konstruktor geben lassen und in einem Array speichern -> index wird ausgewürfelt.

Statt Klassen könnte man auch einfach lambdas übergeben.

Statt lambdas übergeben, kann man in der Factory Klasse die Funktionen definieren (einheitliches Lambda).
 
Wieso müssen überhaupt Objekte erstellt werden... Ich bin nicht sicher üb wir hier eine Sprache sprechen... wenn ihr über den Rückgabewert redet, der wird im gesamten Skript nicht aufgerufen. Es ist eine Auflage von Unity, dass die Rückgabe ein Enumerator sein muss, damit er die Startcoroutine ausführt. Das hat was mit Pseudoparallelität zutun.

Aber ich hab den Code auch im Git also... ein bild sagt mehr als tausend worte... oder... ein code... XD
SpriteAnimation.cs
 
Du hast doch schon die Liste mit Animationen, von der du zufällig auswählen kannst.

Was willst du jetzt eigentlich genau haben?
Willst du eine Animation für Unity angeben, die jedesmal eine andere Animation ausführt?

Btw. du initialisiert Animations doppelt:
Code:
            Animations = new List<Func<Sprite, IEnumerator>>() {

                Scale, FadeIn, Explode, Implode, GrowFromGround, Glow, Waterdrop, Fog, PixelMix };

            Animations = new List<Func<Sprite, IEnumerator>>() { Scale, FadeIn, Explode, Implode, GrowFromGround, PixelMix };
 
Ja das ist gewollt. Nicht alle sind eingebunden, wie ihr seht, darum hab ich erstmal alle reingeschrieben und danach teste ich jetzt die, die ich gerade eingebaut habe, in der Version hab ich das Zusammenspiel getestet^^ wenn ich fertig bin fliegt die 2. Zeile raus.

Es ging hier eigentlich nur um ein Design-Problem, wobei, wenn ihr noch mehr als nur Design-Markel findet nur raus damit.
Der Punkt ist aber der. Erstmal scheint IntelliSense bei den Funktionen zu versagen. Also immer wenn ich in diese rohe liste eine Funktion eintrage, muss ich sie ausschreiben. Da die klasse von MonoBehaviour erbt hat sie hunderte von Variablen und Funktionen. Gut Schreibfehler kreidet mir der Kompiler an aber ^^

Nummer 2: Eben weil in der Klasse so viele Variablen existieren durch das Erbe verliere ich schnell den Überblick. In einer "reinen" Klasse könnte ich wie in nem Katalog alle Funktionen durchbrowsen.

Es wirkt sowieso schon wieder alles recht viel in einer Datei, dabei hab ich sie schon thematisch sortiert.

Aber fragen wir doch mal anders: Wie hättet ihr diese klasse realisiert? Ich häng euch mal ein Video an, damit ihr auch das Endergebnis seht: Google Drive ScreenVid

PS: Wenn ein paar Grafiker unter euch sind könnt ihr ja auch n bisl an den Animationsideen per se rumkritteln^^ Bei der Performance könnt ihr wohl nicht helfen, da das alles Unity-Zeug ist und ihr daher nur raten könnt, dass das nicht unbedingt der effizienteste Weg ist^^
 
Uff ^^ Ich rede vom Inhalt. Im Code steht eigentlich nichts, was man nicht verstehen kann.
Der Link der Datei hat sich wohl geändert... komisch: SpriteAnimations.cs

Aber fragen wir doch einfach mal ganz abstrakt:
Ihr habt eine liste von Funktionen, die ihr zufällig ausgeben wollt, bunt durcheinander gemischt. Wie macht ihr das?

Bei mir sind alle Funktionen in einer Klasse, ich schreibe die Funktionen in eine List<System.Action> und gebe dann zufällig den Index aus. Das hat aber zur Folge dass ich erstmal händisch diese Liste füllen muss und da die Klasse leider von etwas erben muss, ist sie noch voll mit einem haufen anderer irrelevanter Funktionen.

Um die Übersichtlichkeit zu erhöhen wollte ich jetzt eine private statische Klasse bauen, die nur diese Funktionen enthält, öffentlich und statisch, sowie ein paar private und folglicherweise auch statische Funktionen.

Dann könnte ich über Intellisense verwendet Funktionen zumindest schneller finden und es wäre generell auch übersichtlicher.

Die Frage ist, ob ich das so machen kann, oder ob euch vielleicht sogar noch eine bessere Lösung einfällt. bestimmt gibt es auch irgendeine krankhafte Lösung wo man zur Laufzeit die Variablennamen bzw Funktionsnamen auslesen kann, sowas hatte ich schonmal.

Aber da sich ja unsere gesamte Unterhaltung ums Thema "Guter Codestil" dreht, wollte ich halt mal in die Runde fragen.
 
Nagut. Also ich denke ich bin jetz sehr weit gekommen mit der Umstrukturierung. Die Grundfunktionen stehen wieder, ich würds als ne Art (pre)-Alpha definieren ^^

ihr könnt ja mal den Code überfliegen und sehen ob es jetzt besser ist als vorher. Ich denke mal ausgegliedert hab ich gut, ich achte jetzt immer mehr auf die Benennung, mir ist nach wie vor egal WANN ich etwas großßschreibe aber ich achte immerhin auf Konsistenz bei neuem Code zumindest. Jetzt aber nicht so penibel.

statische Variablen hab ich denke ich gut rausbekommen größtenteils. Klar hier und da ist noch was drinne aber joa^^ guckt mal drüber und meckert nochn bisl
 
Zurück
Oben