Jahreszeiten? Funktionieren, jedoch nur bis die Wiederholung der Jahreszeiten kommen

  • Hallo zusammen,


    wieder bin ich es, der ein kleines Problemchen hat. Es liegt daran, dass ich noch nicht viel über Blueprints weiß und wie mächtig diese sein können.
    Momentan bin ich dabei, Jahreszeiten in mein kleines Übungsrojekt zu implementieren und stecke beim Wiederholen der Jahreszeiten fest. Bisher werden nur die Texturen der Blätter und der Rinde verändert.


    Schaut selbst ins Blueprint:
    [Blockierte Grafik: http://fs5.directupload.net/images/151223/temp/sxceknwi.png]


    Kann man das, was ich erreichen will vielleicht auch mit nem Timer erreichen, der alle 10 Sekunden die Textur ändert? Dabei kann ich mir als Problem vorstellen, dass ich immer nur zwei Texturen verwenden kann, die sich dann immer nur abwechseln.
    Ich würde mich freuen, eines besseren belehrt zu werden.


    P.S. So sieht das ganze PIE'ed aus:


    Frühling:
    [Blockierte Grafik: http://fs5.directupload.net/images/151223/temp/9fly68ns.jpg]


    Sommer:
    [Blockierte Grafik: http://fs5.directupload.net/images/151223/temp/u2w5ymq7.jpg]


    Herbst:
    [Blockierte Grafik: http://fs5.directupload.net/images/151223/temp/vjebcxtp.jpg]


    Winter:
    [Blockierte Grafik: http://fs5.directupload.net/images/151223/temp/8ftmdn3l.png]


    Schöne Grüße

  • Sollten die Jahreszeiten später für mehrere Funktionen genutzt werden wäre es zu überlegen eine Parameter Collection zu erstellen, die Materials darauf aufzubauen und dann mittels Blueprint global zu ändern.
    Alternativ kannst Du mit einer Timeline im Blueprint oder mit Delays arbeiten, denn deine aktuelle Methode mit der aktuellen Zeit, die im Spiel vergangen ist, wird eine Wiederholung nicht möglich sein.



    Gruß,
    Bob

  • Von der Theorie her ist es ja einfach, um da eine Schleife daraus zu machen, braucht er nur eine zusätzliche Variable in der die Spiel Zeit gespeichert wird, zu der das Jahr rum war. Dann braucht er nur noch die aktuelle Zeit, davon die besagte Variable abziehen und er hat einen neuen Durchlauf. War zumindest immer meine bisherige Herangehensweise bei solchen Realzeit bedingten Schleifen.



    Hirk: jo, so könnte man dann sogar einen fließend Übergang zwischen den Jahreszeiten machen. Allerdings wird es dann im Frühjahr schwierig weil da die Blätter ja wachsen und im Herbst fallen sie ab. Je nach Projekt ist das vielleicht zu viel des Guten.


    Aber Ende Frühjahr bis Herbst, wenn sie grob nur die Blattfarbe ändert, könnte man das so gut machen. Wobei die Frage ist ob es dafür extra Texturen braucht, einfärben einer Grundtextur müsste doch reichen? Hängt aber natürlich vom Detailgrad ab, den man erreichen will.


    Allerdings geht es hier ja auch mehr um Jahrezeiten an sich als speziell um Bäume.

  • Yo und da müsste ja dann auch ein verrottungsprozess bei den Blättern auf dem boden von statten gehn.
    Was man bestimmt gut hinbekommt wenn man die Blätter immer mehr sagen wir mal 5 Bilder zusammen kräuseln und immer mehr dunkelbraun und tranzparenter werden lässt.
    Sofern du soweit ins Detail gehen möchtest. ^^

  • Bei so viel Detail würde ich dann schon mal viel Spaß wünschen, könnte eine Weile dauern bis das alles fertig ist. Zumal Bäume erst der Anfang sind und Schnee gibts ja auch noch und wenn man Schnee hat bräuchte es eigentlich gleich auch noch ein Wettersystem und... naja, lassen wir das. ^^

  • Hallo zusammen,


    danke für die Antworten. Ich werde mal gucken, was ich mit den Timern oder mit dem Abziehen der Variable von der Spielzeit erreichen kann.
    Ganz sooooo sehr will ich noch nicht ins Detail gehen, erstmal bisschen in paar Funktionen hereinschnuppern, die bei einem größeren Projekt benötig werden... Bin ja gerade erst am Anfang und versuche mich, mit eben meinem momentanen Übungsprojekt, zurechtzufinden.


    Ich wünsche Allen frohe Weihnachten! :thumbup:

  • Yo klar eins nach dem andern ^^
    Und yo das Wetter würde dann natürlich auch noch dazu gehören.
    Falls du mal in mein Projekt rein geschaut hast wirste sehen dass das auch ne art Lebensaufgabe ist. XD
    Aber wie gesagt eins nach dem andern.
    Ich würde sagen wenn du das mit der Verfärbung gemeistert hast,
    könntest dich dann in der Animation versuchen die die Jahreszeiten mit sich bringen.
    So wie ich das sehe ist es ja dann fast mit den selben BP oder C++ eingaben zu programmieren wie bei dem Verfärbungsprozess.
    Ich könnte mich allerdings auch irren aber darauf wird mich hier bestimmt eines besseren belehren. ;P

  • Da wir letztens in der Schule mal so etwas ähnliches in Java gemacht haben, hier mein Lösungsansatz:
    Zuerst brauchst du ne Variable(integer) die immer um 1 vergrößert wird. Das kannst du ruhig mit event tick machen. Dann machst du noch ein Branch dran des checkt ob die variable z.B. größer als 1000 oder was auch immer ist. Wenn das war ist dann soll sie ein CustomEvent aufrufen(nennen wir es mal Wechsel) und gleich darauf den int wieder auf 0 setzen.
    So bestimmst du die Dauer der Jahreszeiten. Je höher du den Wert setzt desto länger dauern sie.


    Jetzt zum CustomEvent Wechsel:
    Dort hast du eine Variable (String/Text). Diese hat immer den Namen der aktuellen jahreszeit. Jetzt machst du wieder ein Branch der von Event Wechsel ausgelöst wird. Dieser soll überprüfen ob z.b. die var Sommer lautet. Wenns stimmt soll er sie auf Herbst setzen und dann gleich deine Materials ändern und was du sonst noch für Herbst brauchst.
    Wenns falsch ist soll er in nem zweiten branch schauen ob sie herbst lautet. Wenns stimmt var auf Winter setzen und alles was du fürn winter brauchst machen.
    Wenn das aber auch falsch ist soll er in nem dritten Branch schauen ob die var Winter ist. Is es wahr soll er sie auf Frühling setzen und alles was du fürn Frühling brauchst.
    Is das jetzt auch falsch kannste die var glei auf sommer setzen und dann das machen lassen was du fürn Sommer brauchst.
    Fertig.


    Das ist zumindest die Lösung aus unserem Java programm in ue4 umgewandelt.
    So hätte ich es eben gemacht...
    LG, Chris
    P.S. wenn du möchtest liefer ich ein Bild nach.

  • Ja, auch ne Möglichkeit. Wobei generell allein die Laufzeit der Software selbst abzufragen keine so gute Idee ist. 1. ist der Start des Spiels meist nicht wirklich der Start des Spiels, weil erst noch ein Start Screen kommt ala "Press start to play". 2. kann man ein Spiel meist auch pausieren. 3. Spielstände verändern das Ganze genauso. Also braucht man einen Timer, dessen Status man speichern bzw. nach belieben anhalten kann.

  • Naja, das ist aber auch nicht wirklich etwas großartiges, das sind simple Programmiergrundlagen, die du da beschreibst. ^^


    Und je nach Programmiersprache und deren Möglichkeiten gibt es bessere Lösungen als If Anweisungen zu verschachteln. Manche Programmiersprachen haben da extra Funktionen um gleich mehrfach zu prüfen ob eine Variable einem bestimmten Inhalt entspricht, was dann automatisch dem entspricht was du oben beschreibst. Ist X = 0 dann, wenn nicht ist X = 1 dann, wenn nicht ist X = 2 dann und wenn auch nicht dann. Ich kenn C++ da nicht und weiß daher nicht ob es dort eine Funktion dafür gibt, in PureBasic, was ich seit Jahren für kleine Tools nutze, gibt es so eine Funktion: Select X Case 0 ... Case 1 ... etc. EndSelect.


    Ich würde auch nicht mit Text Variablen Arbeiten in der der Name der Jahreszeit steht. Simpel 0-3 reicht auch, der Name der Zahlen Variable ist dann Aussage genug, zumal man sich beim Namen einer Jahreszeit leichter verschreiben kann als bei einer einzelnen Ziffer und spätestens dann wenn man das Spiel in verschiedene Sprachen lokalisieren will ist eine solche Text Variable völlig unnütz. Keine gute Art zu programmieren.

  • Ach was...
    Mein Lehrer sagt es wäre dumm des mit Zahlen zu machen...
    Ich habs aber in Zahlen gemacht bei mir. Hier hab ich es nur mit Text gemacht damit man besser reinkommt.
    Außerdem wenn ich des Spiel mehrsprachig mache behalte ich doch das Programmierte in Deutsch

  • Case of gibt es natürlich auch in C++. Vier Zustände mit If Schachteln zu behandeln ist zwar überschaubar, aber case of ist sicher eleganter. Es mag Aufgabenstellungen geben, bei denen es nicht um vier Jahreszeiten sondern um mehrere hundert Irgendwas geht. Wenn man da anfängt If Abfragen zu verschachteln tippt man sich die Tastatur kaputt.


    Text Variablen machen meiner Meinung nach nur Sinn, wenn man diese auch irgendwo als String ausgeben muss. Zum Beispiel, wenn die Jahreszeit als Text eingeblendet werden soll.

    Zitat

    Mein Lehrer sagt es wäre dumm des mit Zahlen zu machen...


    Dann soll er das auch begründen.

  • Ganz ehrlich, ich halte verschachtelte If Abfragen oft genug für ein Werk des Teufels. Finde das nicht besonders übersichtlich. ;)


    Naja, da zeigt sich halt mal wieder das der Lehrer Posten nicht zwingend bedeutet, dass derjenige gut darin ist was er lehrt. ^^


    Und das Problem dabei ist: was man falsch lernt muss man sich später erst mühsam wieder abgewöhnen und gerade beim programmieren kann das richtig mühsam werden.


    Wie gesagt, eine Text Variable so zu verwenden erhöht nur das Risiko von Bugs. Im Grunde reicht eine Kommentarzeile "0 = Frühling" beim definieren der Zahl Variable und der Rest ist klar, man sollte sich eh angewöhnen seinen Source Code zu kommentieren, hilft ungemein später, wenn der Code immer länger wird, noch durchzublicken was man da vor Wochen/Monate zusammengecodet hat... Und die Namen steckt man einfach in ein Text Array und schon kann man die aktuelle Jahreszeit problemlos per Text Array und der Zahl Variable ausgeben. Und das Array kann später über die Lokalisierungsfunktion dann später mit der richtigen Sprache gefüllt werden ohne großartig etwas an der Jahreszeit Funktion selbst umschreiben zu müssen, was sonst nur wieder das Risiko erhöht Bugs einzubauen.

  • Und die Namen steckt man einfach in ein Text Array und schon kann man die aktuelle Jahreszeit problemlos per Text Array und der Zahl Variable ausgeben. Und das Array kann später über die Lokalisierungsfunktion dann später mit der richtigen Sprache gefüllt werden ohne großartig etwas an der Jahreszeit Funktion selbst umschreiben zu müssen, was sonst nur wieder das Risiko erhöht Bugs einzubauen.


    Lustig aber wahr:
    Genau das hab ich zum selben Zeitpunkt gemacht in der ue4, während du das gepostet hast