Hallo Tom, Die Qualität deiner Videos wird immer besser! Mir ist es noch nie so leicht gefallen, ein so komplexes Thema zu verstehen. Freue mich schon auf die nächsten. Danke und weiter so! Gruß
Vielen Dank! Danach habe ich schon vor 2 Jahren gefragt ;) Bin froh, dass es endlich geklappt hat. Eine Nachfrage noch: Kannst du noch ein Ergänzungsvideo machen, wie das mit Seeds funktioniert, oder führt das zu weit? Ich habe nämlich festgestellt, dass manche Programmiersprachen schon einen Zufallsgenerator mit Seeds mit sich bringen, wie man den dann aber einsetzt, wenn man nicht die ganze Welt auf einmal generieren will (sondern Schritt für Schritt und in unterschiedlicher Reihenfolge), kann ich einfach nicht rausfinden. Ich hoffe, du kannst mit helfen ;)
+Hans Müller Der Seed als solches ist ja meist nur eine Startnummer von dem aus die Zufallstabelle ausgeht. Denn der Zufall selbst ist ja kein Zufall, sondern ein Pseudozufall.
Danke :D Brauche sowas momentan zwar überhaup nicht, ist aber trotzdem interessant und wenn ich mal einen Landschaft Generator brauche, weiß ich wie ich es ungefähr machen muss ;D
Hey Tom, kannst du auch mal erzählen, wie man seed-basierte Zufallswerte erhält, da ich das gerne in Verbindung mit Value Noise benutzen möchte. Und danke für das Video, war echt interessant :)
Ab 3:52 habe ich nicht verstanden, wie du auf die Ecken gekommen bist. Hast du wieder Werte von -20 bis 20 zufällig an die Ecken gesetzt? Kannst du mir erklären, wie man das mit Excel super machen kann, oder gibt es eine .xlsx auf deiner Website? Ich konnte das bis 4:50 nämlich leider nicht genau nachvollziehen :)
danke für die antwort also immer *0.75 beim nachbar der zelle und *0.25 beim entfernten nachbarn? bei der zweiten octave hast du 0.5 bei beiden benutzt sehe ich das richtig?
richtig es kommt hal timmer darauf an wo du näher dran bist. darum auch gewichtet. es is tnicht immer 0.75 und beim nderen 0.25. sondern immer im verhältnis. es kann also auch mal 0.33 und 0.67 sein. je näher du an dem einen bist desto weiter weg bist du von dem anderen
+CrayArts Hallo, ich mache keine Programmierspezifischen Videos.. Da wirst du dich selbst mit folgendem Link beschäftigen müssen: phaser.io/examples/v2/category/tilemaps
+bl4ckscor3 Erstens: Du hier? (Ich bin hastumer), zweitens: Ich denke, bei seeds vielleicht dann bestimmte rechnungen, z.B. seed / 4, seed / 14, seed / -9 usw. machen, (festgelegt halt, damit es sich nicht ändert) und dann daraus das berechnen. Wenn du willst, kann ich dir das ja nochmal genauer erklären, was ich meine.
Mal ne Frage: Könnte man nicht einen Pseudo-Random Generator machen? z.B. ich hab ein Tilefeld von 10*10 Tiles. Ich fange oben links an und generiere eine komplett Random (Oder Pseudorandom, wir sind ja bei Computern, halt nicht beeinflusst durch den Mapgenerator) Zahl. Dann rechne ich tilevalue1 = randomzahl/(10^[anzahl der ziffern]). Dadurch habe ich eine Zahl von 0 bis 1. dann gehe ich eins weiter nach rechts. Ich benutze eine Random-Zahl und tilevalue1 und generiere daraus eine random zahl. allerdings hat diese Zahl eine relativ hohe Wahrscheinlichkeit, dass sie nah an tilevalue1 liegt. Das mache ich immer weiter, bis die Zeile fertig generiert ist. Dann geh ich in die zweite Zeile und mache das gleiche, allerdings nehme ich jetzt die random numbers in einem 3x3 block um die kachel (wie bei dir in dem Erosions/Dilatations Video) und nehme diese als seeds, WENN sie nicht leere Felder sind. Das mache ich für jede Reihe und am ende sollte ich doch auch eine recht gut generierte, zusammenhängende Welt haben, oder? (Natürlich, wenn man Pech hat, nicht, aber danach könnte man ja nochmal einen "Cleaner" über die Welt laufen lassen, sodass sie nicht wirklich komisch mehr ist.)
Das ist wie bei dem 1dimensionalen Verfahren. Da in jedem Durchgang da Intervall erhöht wird um am Ende kleine und große Varianten zu haben. Also grobe Berge auf die dann Mittelgrobe Berge hinzukommen und am Ende die feinen und das ist dann jede Zelle und es wird nicht mehr interpoliert
einfach ein paar sinusse verwenden. welche mit niedriger Frequenz und hoher Amplitude, und welche mit hoher Frequenz und niedriger Amplitude. Sollte da nicht was ähnliches raus kommen?
+hanspeter2210 Klar, kann man auch machen. Das ist das aber halt kein Value Noise Algorithmus mehr :) Es gibt tausende Wege etwas zufällig zu erschaffen, da kann man durchaus kreativ werden.
+Deer Viehch Eigentlich nicht aber du kannst die Ergebnisse natürlich auch multiplizieren. Da danach ja eh normalisiert wird ist das dann einfach eine andere Methode.
+LetsGameDev Hi, ich hätte mal ein paar Fragen. Ich will mit Freunden ein Fangame für Luigi's Mansion machen. Welche Programmiersprache sollte ich dafür benutzen? Wie kann ich die Texturen bekommen? Soll ich dafür einen Editor, wie RPG-Maker oder Unity benutzen? Es wäre sehr nett, wenn du diese Fragen beantworten könntest
Hi Tom kannst du mal wenn du willst und zeit hast ein video machen über Shoebox machen mit dem man Sprites machen kann würde mich freuen aber nur machen wenn du willst und zeit hast wenn du nicht willst ist es nicht schlimm Danke :D
LetsGameDev Am Anfang des Videos dachte ich aber vllt hat auch der Browser gesponnen :P . Oooder ihr wollt mich nur fertig machen und habt sie nachträglich eingefügt *grübel * xD
Es wäre ja auch VIEL zu einfach gewesen mit Werten zwischen 0 und 1 anzufangen und dann auf 0.25 bis 0.75 zu verkleinern etc um sich den Dreisatz zu sparen... Warum einfach wenn es auch kompliziert geht.
Ja eben, mit deiner Methode sparst du dir doch nichts. Für mich hat es sich so angehört als würdest du auf den Schritt der Normierung verzichten können mit deiner Methode. Ob du nun am Ende zufällige Werte von -142 bis 213 oder -1.2542 bis 1.2435 normierst ist total egal. Es kann gut sein, dass wir aneinander vorbeireden. Vielleicht möchtest du deinen Verbesserungsvorschlag näher ausführen?
LetsGameDev Naja, wenn man einfach die Bereiche aus denen man die Zufallszahlen wählt so anpasst, dass die Werte zwischen 0 und 1 liegen, dann spart man sich die Normierung.
Wenn du auf die normierung verzichtest und über den -theoretischen minimalen und maximalen Wertebereich bescheid weisst, kannst du das so machen. wenn der zum beispiel theoretisch von -75 bis 75 geht kannst du ja auch einfach sagen "okay alles ab 60 ist eben Berglandschaft" Es kann dann sein, dass dein tatsächlicher Wertebereich dann zwischen -40 und 2 liegt. Es würde dann einfach keine Berge geben. Wenn das für deinen Anwendungsfall so okay ist, dann ist das gut. Meist will man aber eine genauere Kontrolle über alles haben. Die Normierung dient vor allem auch der Generalisierung. So kannst du dann die gleiche Funktion für verschiedene Aufgaben nutzen und weißt einfach, dass da immer ein normierter Wertebereich zurückkommt. Am Ende ist nur wichtig was für dein Problem hilft. So wie ich den Algorythmus hier gezeigt habe, ist er schulmäßig. Ihn an seine Bedürfnisse anzupassen liegt dann in der Hand des Entwicklers.
Einen RPG wird Tom wahrscheinlich nicht wählen, weil wenn man ein RPG in Java oder C++ usw programmiert, hat man nach einigen Wochen erst ein paar Level, aber wenn einige zB den RPG Maker benutzen, sind sie mit dem Ganzem Spiel schon nach einer Woche fertig ^^PS das waren viele Kommas xD
***** Das Problem mit dem RPG Maker ist in der Hinsicht aber nur nützlich, wenn du ein Kampfsystem a la FF benutzen möchtest. Aber ja, ich verstehe worauf du hinaus willst und du hast einen Punkt
Mehr davon! o-o
Lasst uns eine Klonmaschine bauen und eine Sklaven-Tom Armee züchten die massig Let's GameDev's produziert!
+Neqiro hahaha xD
Mensch den Brotcrunscher kennt man doch, da hab ich Java gelernt
Ich hab zwar keinen Plan was du da immer sagst aber es ist mega intresant und unterhaltsam.
Mega geil das ihr jetzt etwas zusammen macht - bitte unbedingt öfter machen!!!!!!
Hallo Tom,
Die Qualität deiner Videos wird immer besser!
Mir ist es noch nie so leicht gefallen, ein so komplexes Thema zu verstehen.
Freue mich schon auf die nächsten.
Danke und weiter so!
Gruß
+MartinW. Schön, das es dir gefällt!
Mehr davon!! Absolut geil gemacht Leute, meine zwei Lieblingsyoutuber vereint.
Du hast ein sehr schönes und Innovatives Intro.
Nicht so ne Dupstep scheiße wie jeder hat.
Schön, gefällt mir.
Vielen Dank! Danach habe ich schon vor 2 Jahren gefragt ;) Bin froh, dass es endlich geklappt hat.
Eine Nachfrage noch: Kannst du noch ein Ergänzungsvideo machen, wie das mit Seeds funktioniert, oder führt das zu weit? Ich habe nämlich festgestellt, dass manche Programmiersprachen schon einen Zufallsgenerator mit Seeds mit sich bringen, wie man den dann aber einsetzt, wenn man nicht die ganze Welt auf einmal generieren will (sondern Schritt für Schritt und in unterschiedlicher Reihenfolge), kann ich einfach nicht rausfinden. Ich hoffe, du kannst mit helfen ;)
+Hans Müller Der Seed als solches ist ja meist nur eine Startnummer von dem aus die Zufallstabelle ausgeht. Denn der Zufall selbst ist ja kein Zufall, sondern ein Pseudozufall.
jede programmiersprache benutzt dafür einen seed, meist ist dieser aus der aktuellen uhrzeit berechnet wenn du keinen angibst
Oh endlich ein neues Video!
Sollte wieder mehr solcher Videos geben :-)
Danke :D
Brauche sowas momentan zwar überhaup nicht, ist aber trotzdem interessant und wenn ich mal einen Landschaft Generator brauche, weiß ich wie ich es ungefähr machen muss ;D
+Pizza Train PS Der Sound ist besser geworden!
Sehr gut erklärt!
04:21 er zeigt uns den Mittelfinger :o
Sehr sehr schönes Video
Ich habe mir vorgenommen eine Welt zufällig generieren zu lassen, 2 Wochen später kommt dieses Video.
Danke!!!
+TUTEDUTSCH Da haben wir ja Glück gehabt^^
Ich vor allem. War ganz kurz davor das Projekt zu löschen weil ich einfach gar nix gefunden habe:/
4:21
Stichwort :Mittelfinger
Oh Gott, was ist mit der Soundqualität passiert?
aus deinem Beispielbild fürs Hintergrundrauschen hab ich einfach mal mit Gimp eine Lavatextur gemacht :)
Echt gut erklärt! Ist das auch mit Musik möglich, hab nämlich drüber nachgedacht Musik prozedural zu erstellen. Hoffe du kannst mir Tipps geben.
Hey Tom,
kannst du auch mal erzählen, wie man seed-basierte Zufallswerte erhält, da ich das gerne in Verbindung mit Value Noise benutzen möchte. Und danke für das Video, war echt interessant :)
An sich kannst du in jeder sprache den Seed ja neu setzen, meistens anhand der aktuellen uhrzeit als millisekunden seit 1970
Ab 3:52 habe ich nicht verstanden, wie du auf die Ecken gekommen bist. Hast du wieder Werte von -20 bis 20 zufällig an die Ecken gesetzt? Kannst du mir erklären, wie man das mit Excel super machen kann, oder gibt es eine .xlsx auf deiner Website? Ich konnte das bis 4:50 nämlich leider nicht genau nachvollziehen :)
hast du zu dem Mittelwert einen Link der das nochmal weiter erklärt?
+MCEndercrafttv Du meinst den gewichteten Mittelwert? Du wirst es nicht glauben, aber im Grunde ist bei 5:09 die gesamte Erklärung gegeben.
danke für die antwort also immer *0.75 beim nachbar der zelle und *0.25 beim entfernten nachbarn? bei der zweiten octave hast du 0.5 bei beiden benutzt sehe ich das richtig?
richtig es kommt hal timmer darauf an wo du näher dran bist. darum auch gewichtet. es is tnicht immer 0.75 und beim nderen 0.25. sondern immer im verhältnis. es kann also auch mal 0.33 und 0.67 sein. je näher du an dem einen bist desto weiter weg bist du von dem anderen
Erstmal gutes Video und zweitens könntest du bitte mal ein Tutorial machen wie man Tilemaps in Phaser einbindet ?
+CrayArts Hallo, ich mache keine Programmierspezifischen Videos.. Da wirst du dich selbst mit folgendem Link beschäftigen müssen: phaser.io/examples/v2/category/tilemaps
Ok Danke
Funktioniert Simplex Noise ähnlich hierzu, oder ist das komplett anders?
Und könntest du vielleicht mal ein Video zu seed-basiertem noise machen? :)
+bl4ckscor3 Im Grunde kommts auf das "selbe" raus. Super deep bin ich da aber auch nicht drin^^
+bl4ckscor3 Erstens: Du hier? (Ich bin hastumer), zweitens: Ich denke, bei seeds vielleicht dann bestimmte rechnungen, z.B. seed / 4, seed / 14, seed / -9 usw. machen, (festgelegt halt, damit es sich nicht ändert) und dann daraus das berechnen. Wenn du willst, kann ich dir das ja nochmal genauer erklären, was ich meine.
Danke für die gute Erklärung!!
Aber ich finde den "Random Map Generator" nicht wirklich unter den links oder übersehe ich diesen nur ?
+Mathias Kraw (Xeracles) Ich doofi! Ist nun in der Videobeschriebung und hier: lets-gamedev.de/noisemap/
+LetsGameDev Danke :)
Mal ne Frage: Könnte man nicht einen Pseudo-Random Generator machen? z.B. ich hab ein Tilefeld von 10*10 Tiles. Ich fange oben links an und generiere eine komplett Random (Oder Pseudorandom, wir sind ja bei Computern, halt nicht beeinflusst durch den Mapgenerator) Zahl. Dann rechne ich tilevalue1 = randomzahl/(10^[anzahl der ziffern]). Dadurch habe ich eine Zahl von 0 bis 1. dann gehe ich eins weiter nach rechts. Ich benutze eine Random-Zahl und tilevalue1 und generiere daraus eine random zahl. allerdings hat diese Zahl eine relativ hohe Wahrscheinlichkeit, dass sie nah an tilevalue1 liegt. Das mache ich immer weiter, bis die Zeile fertig generiert ist. Dann geh ich in die zweite Zeile und mache das gleiche, allerdings nehme ich jetzt die random numbers in einem 3x3 block um die kachel (wie bei dir in dem Erosions/Dilatations Video) und nehme diese als seeds, WENN sie nicht leere Felder sind. Das mache ich für jede Reihe und am ende sollte ich doch auch eine recht gut generierte, zusammenhängende Welt haben, oder? (Natürlich, wenn man Pech hat, nicht, aber danach könnte man ja nochmal einen "Cleaner" über die Welt laufen lassen, sodass sie nicht wirklich komisch mehr ist.)
Klar kannst du machen. Ob da was brauchbaren bei rauskommt, musst du testen. Mach das mal und berichte uns!
LetsGameDev Bin gerade dabei! :3
4:22 Warum zeigst du uns den Mittelfinger?
Hey "LetsGameDev"!
Welche Game Engine benutzt du eigentlich für Java?
Als ich noch in Java gearbeitet habe, habe ich entweder gar keine genutzt oder libGDX
LetsGameDev Danke. Warum arbeitest du nicht mehr in Java :)?
Da ich beruflich auch mit html5 zu tun habe bin ich da dann einfach auch privat geblieben
LetsGameDev Danke für die schnelle antworten.
Wieso wird bei der 2-Dimensionalen Variante das letzte Array mit zufälligen Werten gefüllt ? Welchen Zweck erfüllt es ?
Ich weiß nicht genau was du meinst, da wir die arrays doch immer mit zufälligen Zahlen befüllen die dann interpoliert werden.
LetsGameDev Ab der 5:35 Minute befüllst du jede Zelle mit einem zufälligen Wert (-5 bis 5). Wieso aber?
Das ist wie bei dem 1dimensionalen Verfahren. Da in jedem Durchgang da Intervall erhöht wird um am Ende kleine und große Varianten zu haben. Also grobe Berge auf die dann Mittelgrobe Berge hinzukommen und am Ende die feinen und das ist dann jede Zelle und es wird nicht mehr interpoliert
Achso Danke
einfach ein paar sinusse verwenden. welche mit niedriger Frequenz und hoher Amplitude, und welche mit hoher Frequenz und niedriger Amplitude.
Sollte da nicht was ähnliches raus kommen?
+hanspeter2210 Klar, kann man auch machen. Das ist das aber halt kein Value Noise Algorithmus mehr :) Es gibt tausende Wege etwas zufällig zu erschaffen, da kann man durchaus kreativ werden.
multipliziert man die oktaven nich?
+Deer Viehch Eigentlich nicht aber du kannst die Ergebnisse natürlich auch multiplizieren. Da danach ja eh normalisiert wird ist das dann einfach eine andere Methode.
+LetsGameDev Hi, ich hätte mal ein paar Fragen. Ich will mit Freunden ein Fangame für Luigi's Mansion machen. Welche Programmiersprache sollte ich dafür benutzen? Wie kann ich die Texturen bekommen? Soll ich dafür einen Editor, wie RPG-Maker oder Unity benutzen? Es wäre sehr nett, wenn du diese Fragen beantworten könntest
***** Wie würdest du dein können einstufen?
+Deer Viehch Ich kann schon gut Programmieren. Ich hab zum Beispiel schon Mods für Minecraft gemacht und ein kleines Spiel für Android programmiert.
+Deer Viehch Ich kann übrigens Java, HTML, Javascript und ein bisschen C++
kannst du bitte mal einen c++ crashcourse machen wo du leicht die programmiersprache erklärst und bücher und kostenlose informationen empfielst
gidf.de
cse.google.de/cse?q=c%20%20%20craskurs&sa=Suche&cx=partner-pub-0030114367999801:7ve7oxp555y#gsc.tab=0&gsc.q=c%20craskurs&gsc.page=1
Hey, könnte man vielleicht den Source Code deines Map-Generators kriegen? Wäre super :)
Den hast du schon ;)
Strg+u auf der Seite bringt dich hin.
Danke :D
cooles video
Warum cuttest du so viel
So kommt Information schneller an und ich muss mir nicht 200 Sätze merken sondern nur 2.
Hi Tom kannst du mal wenn du willst und zeit hast ein video machen über Shoebox machen mit dem man Sprites machen kann würde mich freuen aber nur machen wenn du willst und zeit hast wenn du nicht willst ist es nicht schlimm Danke :D
Ich klicke und Klicke doch ich starte und pausiere nur das Video ! :P # Anmerkung hinzufügen ;)
+detlef isweg Wo fehlt eine Anmerkung?
LetsGameDev Am Anfang des Videos dachte ich aber vllt hat auch der Browser gesponnen :P . Oooder ihr wollt mich nur fertig machen und habt sie nachträglich eingefügt *grübel * xD
3:22 das denkt er wirklich von uns
I can't understand a single word.
But thanks hahaha
Der Gute Herr hat wohl auch das hier gesehen:
ua-cam.com/video/_2Ea2GOECEs/v-deo.html
Und hatte lust zu erklaeren
Ich versteh nicht warum so kompliziert mach einfach nen Zufalls Generator mit unity random range
Weil ich dir hier erklärt habe was da im Hintergrund passiert!
@@LetsGameDev ganz schön kompliziert was da im hinter Grund passiert aber trotzdem einigermaßen verständlich erklärt
Es wäre ja auch VIEL zu einfach gewesen mit Werten zwischen 0 und 1 anzufangen und dann auf 0.25 bis 0.75 zu verkleinern etc um sich den Dreisatz zu sparen... Warum einfach wenn es auch kompliziert geht.
+Backnight Stimmt! Werte von -1.3231 bis 1.2343 sind viel eher 0 bis 1! Warum Richtig, wens auch fast richtig geht?
LetsGameDev
Hä? Du wandelst doch hinterher negative sowieso in positive Zahlen um^^ oder versteh ich das falsch?
Ja eben, mit deiner Methode sparst du dir doch nichts. Für mich hat es sich so angehört als würdest du auf den Schritt der Normierung verzichten können mit deiner Methode.
Ob du nun am Ende zufällige Werte von -142 bis 213 oder -1.2542 bis 1.2435 normierst ist total egal.
Es kann gut sein, dass wir aneinander vorbeireden. Vielleicht möchtest du deinen Verbesserungsvorschlag näher ausführen?
LetsGameDev
Naja, wenn man einfach die Bereiche aus denen man die Zufallszahlen wählt so anpasst, dass die Werte zwischen 0 und 1 liegen, dann spart man sich die Normierung.
Wenn du auf die normierung verzichtest und über den -theoretischen minimalen und maximalen Wertebereich bescheid weisst, kannst du das so machen.
wenn der zum beispiel theoretisch von -75 bis 75 geht kannst du ja auch einfach sagen "okay alles ab 60 ist eben Berglandschaft"
Es kann dann sein, dass dein tatsächlicher Wertebereich dann zwischen -40 und 2 liegt.
Es würde dann einfach keine Berge geben. Wenn das für deinen Anwendungsfall so okay ist, dann ist das gut.
Meist will man aber eine genauere Kontrolle über alles haben. Die Normierung dient vor allem auch der Generalisierung. So kannst du dann die gleiche Funktion für verschiedene Aufgaben nutzen und weißt einfach, dass da immer ein normierter Wertebereich zurückkommt.
Am Ende ist nur wichtig was für dein Problem hilft. So wie ich den Algorythmus hier gezeigt habe, ist er schulmäßig. Ihn an seine Bedürfnisse anzupassen liegt dann in der Hand des Entwicklers.
Noice
hab mir auch grad gedacht.
Erster muhahahahahah
Werde mich demnächst mal ransetzen und das ganze in einem kleinem Spiel in LÖVE nachbauen.
Danke für das Video
ich hab gerade irgendwie echt Bock ein 2D RPG zu entwickeln.. Schon Pläne für #gppcc9? xD
Einen RPG wird Tom wahrscheinlich nicht wählen, weil wenn man ein RPG in Java oder C++ usw programmiert, hat man nach einigen Wochen erst ein paar Level, aber wenn einige zB den RPG Maker benutzen, sind sie mit dem Ganzem Spiel schon nach einer Woche fertig ^^PS das waren viele Kommas xD
***** Das Problem mit dem RPG Maker ist in der Hinsicht aber nur nützlich, wenn du ein Kampfsystem a la FF benutzen möchtest.
Aber ja, ich verstehe worauf du hinaus willst und du hast einen Punkt
4:22 Du bist aber nicht nett zu deinen Zuschauern. Solche handzeichen...
3:22 das denkt er wirklich von uns
+FröhlicherKeks korrigiere: 4:22