Pixellandschaft im Worms-style
Übersicht

PhillipKBetreff: Pixellandschaft im Worms-style |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Halli hallo hallöle ![]() Ich arbeite nu schon ein paar Tage an der Unwissenheit, wie man Veränderbare Pixellandschaften ala Worms erstellt und bearbeitet. Mein grundproblem ist, das TPixmap zu Zeichnen langsam ist und TImage zu wenig manipulierbar ist. Die einzige Idee war, eine mischung zu verwenden. Und um häufiges auslesen der Pixmap zu vermeiden, die werte 'vereinfacht' in einem Array einzutragen. Nun habe ich eine kleines Testprogramm geschrieben, welches eine Landschaft generiert und ein wenig veränderbar macht. Dies habe ich für euch mal abgespeckt, damit ihr den groben Kern angucken + Kritisieren könnt. BlitzMax: [AUSKLAPPEN] SuperStrict Grundidee: Landschaft wird generiert und die Pixmap ausgelesen. Je nach farbwert (Ich unterscheide zwischen Himmel und nicht-himmel) wird in einem Landschafts-internen 2D array ein wert eingetragen. Nutzung: Die Landschaft wird ganz normal als TImage gezeichnet. Durch den Array kann ich feststellen, wo boden ist und wo nicht. In meinem Programm hatte ich zb Strichmännchen die darauf gelaufen sind und eine Kanone, die auf Jene geschossen hat. Traf ein geschoss den Boden -> Boden wegmachen (mit der funktion die im Abgespeckten programm nun 'Boom' heißt) Traf es ein Menschlein, wurden Blutpixel "weggeschleudert" und, bei einem Treffer auf den Boden, oben draufgelegt. Funktion: Die Landschaft ist ein Bild, meine änderungen trage ich in die TImage.Pixmaps[0] - TPixmap ein. Jedesmal, wenn ich das getan habe, setze ich Landschaft.changed = 1, welches die TImage.SetPixmap() funktion aufruft und an index 0 die Pixmap einträgt. Zum verändern der Pixmap nutze ich nur TPixmap.WritePixel ![]() Da ist fraglich, ob das der Beste weg ist. -------------- So, genug erklärt. Jetzt seid ihr dran. Wie ist mein ansatz, die Landschaft zu verändern? Denke ich zu kompliziert bezüglich der Pixmaps? Gibt es einfachere wege, auf ein TImage zu zeichnen? Wäre es zb einfacher, das bild einfach neu zu Grabben, nachdem ich es verändert habe und den Ground2[,] array an der entsprechenden Zeichenstelle neuzubauen? Hat sonst jemand soetwas schonmal umgesetzt? Wie waren eure ideen und Methoden? Kritik ist erwünscht ![]() Gruß, PhillipK |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
So viel ich weiß, hat der Entwickler von Carnage Contest das Problem so gelöst, indem er das gesamte Spielfeld in kleinere Bilder aufgeteilt hat. Wenn dann nur die nötigen Bilder geändert werden, müssen nicht so viele Pixeldaten zur Grafikkarte geschickt werden. (Das macht nämlich das Ändern von Bildern ziemlich langsam.)
Man sollte außerdem die Bildpixmap anders bestimmen: Mit "LockImage" bekommt man auch die Pixmap und das Bild weiß anhand der Parameter, ob die Pixmap verändert wurde/wird. Daher brauchst du dann keinen extra Zustand, dass du das Bild manipuliert hast, und musst außerdem keinen SetPixmap-Aufruf starten. Dadurch wird bei Bildern mit einer zu Maskierenden Farbe ein MaskPixmap-Durchlauf gespart. (Du kannst bei WritePixmap die Undurchsichtigkeit selbst bestimmen.) Das Auslesen aus einer Pixmap sollte schnell gehen, da dort nur eine Adressenbestimmung und dann eine Fallunterscheidung für die verschiedenen Formate stattfindet. Alternativ kannst du auch direkt auf den Pixmap-Speicher zugreifen. (Nachteil: Man verwendet hierbei Pointer und muss daher die Pixeladressen selbst bestimmen.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mhh, kleine Bilder, das klingt nach einem Plan.
Nur die frage, wie groß sollten diese bilder sein? 10x10 Pixelraster? Einzelne Landteile? Ich tendiere, so nach dem ersten Lesen, zu 10x10 Pixel-rastern, bzw 8x8 / 16x16 / 32x32 Wobei ich die unteren und rechten ränder jeweils in Teilstücken belasse. Das LockImage ding muss ich mir nochmal angucken, das klingt nach einem Plan^^ Im moment isses ein wenig schlecht, aber ich werde mir heute oder morgen nochmal das ganze anschauen und das ein wenig umbasteln. Wo ich grade drüber nachdenke, dürfte es unmenschlich lange dauern, 5000x5000 pixel-landschaften zu "erneuern" - grade weil die TPixmap erstmal zu einem TImage convertiert werden muss ^^ |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
im codearchiv gibt es ne implementierung die wimre 32x32 pixmaps benutzt | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine Tests für Gestrandet ergaben, dass 64*64 die besten Resultate liefern.
Aufjedenfall sollte es eine 2er Potenz sein (alles andere wäre reine Verschwendung). |
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Man. ich bin neidisch, wie einige diese Zufälligen landschaften lösen.
Das sieht ganz krass nach DrawOval() aus, obwohls dennoch so willkürlich und ungleichmäßig aussieht. Mein größtes problem ist dabei das Texturieren - im moment verwende ich noch Random-SetColor() befehle und kleine linienstücke, die fast Kreismäßig gemalt werden. Wenn ich allerdings auf Texturen umsteige, wüsste ich nicht, wie ich die zusammenfüge :> Meine erste intuition wäre: Erstmal erde, dann oberen Rand (mit ner abstandsprüfung zum rand?) und dann evtl noch einen unteren rand hinzuzeichnen. Da kommt das problem der maske auf: Kann ich stücke der landschaft, evtl per Pixmap, so maskieren, das ich später weiß, was für eine Textur reinkommt? Oder wäre es ein richtiger ansatz, die erstelle landschaft in 2 (mit unterem Rand 3) stücke aufzuteilen, jedes Image zu texturieren und übereinander zu zeichnen? |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Souu, habe die ersten Test abgeschlossen und stehe direkt wieder vor einem Problem.
Ich kann die genaue arbeitsweise von GrabImage und den Draw befehlen nicht wirklich feststellen. Zuersteinmal habe ich versucht, ein großes 3200x3200 pixel TImage zu erschaffen, in mein fenster zu malen und das Bild zu grabben. Das klappte allerdings nicht, was ich darauf schiebe, das grabimage von X,Y until Window Width und Height 'grabbt'. Mein 2ter versuch wärs gewesen, das bild direkt auf 400 Timages zu grabben, welche je eine höhe und breite von den vorgeschlagenen 64x64 pixeln haben. Doch auch das wollte nicht so ganz, da ich mit der Zeichnung enorme schwierigkeiten habe. (Ps: Ich habe vorher mit SetViewPort() das bild auf 64x64 pixeln an koordinate 0,0 beschränkt und dort meine Zeichenoperationen vorgenommen. Danach per Grabimage() in das entsprechende Tile eingefügt.) Welchen dieser beiden ansätze kann ich nun weiterverfolgen, um eine Landschaft, welche größer und breiter als mein eigentliches Fenster ist, in 20x20 kleine TImages zu zerteilen? (Zumal die auch nahtlos übergehen sollten ![]() -------------------- Edit 20.06.2011 - 06:47: Ich kriegs einfach nicht hin, die landschaft in 64x64 pixel-bilder aufzuteilen (bzw so zu erzeugen), sodass sie auchnoch Nahtlose übergänge hat. Mich regts tierisch auf, das es unter Bmax kein Rendern auf Image gibt ![]() Und dieses doofe drawzeug malt nur innerhalb des bildschirms ![]() Es ist einfach, eine landschaft zu erzeugen, und diese danach zu unterteilen. Da ich aber landschaften > bildschirmbreite/höhe anpeile (testzwecke halt ^-^), verlaufe ich mich die ganze zeit in meinen abfragen. Meine bisherigen versuche laufen darauf hinaus, das ich mir die Koordinaten vorstelle, jeweils im bereich0,0,64,64 zeichne und die Bildslots ausrechne. Das haut aber alles nicht hin, ist zu langsam, etc etc etc. Ich brauche einen neuen ansatz. Hat irgendwer einen vorschlag? ![]() Gruß, ein *verzweifelter* Phillipk |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie sieht denn dein aktueller Code aus? (wenn möglich etwas, was man auch testen kann)
Denn nach dem vergleichsweise langem Zeichnen am Anfang, sollte das System schnell sein. Zu deinem Zeichenproblem: Nutzt du nun SetOrigin? Damit kannst du die Verschiebung sehr elegant lösen. Du musst notfalls mehrfach zeichnen. (Das geht aber im Gegensatz zum Hochladen von Texturen auf die Grafikkarte schnell, wenn du größere Ausschnitte, die mehrere Bilder enthalten, zusammenfasst.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Im moment habe ich garnichts.
So frustierend wie das ganze war, hab ich immer hardcore gelöscht. Ich kann nur grob die idee zusammenfassen, die ich verfolgt hatte: BlitzMax: [AUSKLAPPEN]
Mh, das habe ich grade aus dem Kopf geschrieben, aber so etwa habe ich es versucht. Ansatz: Ich versuche lediglich ersteinmal eine Zufällige linie über die Map zu zeichnen. Dazu nutze ich den Random-errechneten Wert für Y, einen X-Koordinaten zähler der von 0 until Landschaft.Width() zählt, sowie Modulardivision um die koordinate auf das eigentlich 64x64 feld runterzurechnen. Das aktuelle bildstück bestimme ich durch eine normale Division, welche aufgrund der Integer-abrundung stimmen sollte. In dem beispiel SOLLTE die grobe logik stimmen, es fehlen lediglich noch abgleiche, ob im Teile[,] ein Array index out of bounds auftreten könnte. Die idee mit SetOrigin hat mich grade auf die idee gebracht, das ich mit meinen SlotX und SlotY den origin errechne. Etwa so: SetOrigin(-(SlotX*64), -(SlotY*64), das die modular division spart und somit evtl eine fehlerquelle ausmerzt ![]() ![]() ------- Edit 20.06.2011 - 11:40 So, ich habe nun mal ein bissl getippert. Ist zwar ziemlich peinlich, weil ich so dreckig programmiere, aber naja ^^ BlitzMax: [AUSKLAPPEN] SuperStrict Wie es funktioniert: Am anfang wird ein Tile-TImage array initialisiert und dann anhand diverser DrawLine() befehle gefüllt. Sollte zumindest. Mit WSAD kann man bei Laufzeit SetOrigin() verstellen und sich die landschaft so 'angucken' Im über das raster werden 4 linien gezeichnet, die anzeigen, wo ein Bildstück sein sollte. Mittig auf der Y achse erkennt man eine große grade fläche, das sind bilder die mit DrawLine() bemalt worden sein sollten, sind sie aber nicht -.- Die graue farbe kommt durch das SetclsColor() was ich debugweise auf grau eingestellt hab. Dh alles was einen grauen hintergrund hat, wurde von meiner Zeichenroutine bearbeitet und am ende gegrabbt. Ich vermute einen denkfehler dort, wo ich das image grabben wollte. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde dir gerne auch helfen, aber ich verstehe immer nur "bahnhof" bei dem, was du da schreibst....
ich verstehe schon dein Problem nicht: Bekommst du es nun nicht hin eine Landschaft zu malen? oder Bekommst Du es nicht hin, diese Landschaft zu grabben? oder Bekommst Du es nicht hin, diese Lanschaft wieder anzuzeigen? Im ersten Beitrag hattest du doch schon etwas abgeliefert, was schon sehr ordentlich aussah. Wo war dein Problem dabei? War es dein Code? Ich kann auf dem Programm, das du zuletzt eingestellt hast nicht wirlkich etwas Sinnvolles erkennen... Vielleicht solltest Du Deine Probleme in Teilbereiche aufsplitten und jeden für sich lösen. Das mit dem Grabben ist doch ganz einfach. Ich hab da neulich jemandem im engl. Forum geholfen: im ersten code scrollt eine Landschaft waagrecht: BlitzMax: [AUSKLAPPEN] SuperStrict im ersten code scrollt eine Landschaft in beide Richtungen (von oben gesehen): BlitzMax: [AUSKLAPPEN] SuperStrict da mußt du eigentlich nur noch sinnvolle Grab-Bilder erstellen. So nun schreib mal, was man da noch verändern müßte, bis es zu deinem Projekt passt. Wir finden sicherlich eine Lösung! |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Midimaster!
Nun, das ding aus meinem ersten Beitrag war ein 'komplettes' bild. Die überlegung, das eine größere Landschaft zu updaten sicherlich enorm leistung braucht, hatte ich nicht getätigt. Nun wurde mir nahe gelegt, die Landschaft in mehrere Bildchen aufzuteilen, wie es in anderen Bmax spielen auch getan wird. Doch genau hier ist der Knackpunkt - es will mir einfach nicht nicht in den Kopf rein, wie ich die Landschaft ordentlich zeichnen kann. Ich habe diverse Tests gemacht, immer habe ich irgendwo kleinere Probleme. Als neuste lösung versuche ich nun, ein Landschafts-type zu schreiben, was Untergeordnete Tile-Types enhtält, mit angaben, wie ich die Landschaft aufbauen muss. Darüber hinaus werde ich die Draw-befehle neuschreiben, welche alle betreffenden Bilder bemalen. Das ganze ist allerdings Zukunftsmusik, in Wahrheit habe ich immernoch keine ahnung, wie ich Nahtlose Landschafts-tiles erstelle. ---- Nun mal übergeordnet das erste Problem: Wie unterteile ich die Landschaft? Anfangs größere bildteile zeichnen und sie zb in 3x3 kleinere Bilder zerschneiden, ränder zum neuen Bereich wieder Zeichnen und weiter Zeichnen? ODer direkt auf die 64x64 pixel-kacheln gehen und versuchen, die übergänge darzustellen? ![]() Edit: Deinen Beispielcode kann ich grade nicht durcharbeiten, bin ein wenig fertig und meine Freundin hat Priorität ![]() ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
kannst Du denn die Landschaft (rein theoretisch) bereits endlos weiterzeichnen?
Wir machen das jetzt schrittweise: Zeichne von der Landschaft einen kompletten Bildschirm 1280x1024 voll. Daraus grappst Du gleich mal 1 Bild a 64x64pix. Nämlich bei 0/0! Gelingt Dir das? Dann mach es so weiter: Zeichne von der Landschaft einen kompletten Bildschirm 1280x1024 voll. Daraus grappst Du gleich mal 80 Bilder a 64x64pix. Nämlich 10 waagrechte x 8 senkrechte. Gelingt Dir das? Dann mach es so weiter: Zeichne von der Landschaft einen kompletten Bildschirm 1280x1024 voll, aber ziehe von den X-Koordinaten vor dem Zeichnen immer 1280 ab, male dafür bis X=2560. Gelingt Dir das? P.S. eine Frage hast Du noch nicht beantwortet, es ist aber wichtig für die weitere Arbeit: War dein erster Code-Beitrag von Dir alleine geschrieben worden? |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So.
Ich kann zwar immernochnicht weiterarbeiten, war aber gespannt auf weitere Antworten ![]() Dein Step-by-Step werde ich wohl morgen früh mal durcharbeiten. Ich fürchte fast, damit wirds klappen, obwohl ich grade im ersten moment schmunzeln musste. Ich halte leider recht viel auf meine fähgikeiten, die quasie überall nur ansatzweise bestehen. Ich denke ich übersehe wieder ein paar kleinere Details. Nun, ich überwinde meinen stolz und lasse mich an die Hand nehmen ![]() Und ja, der erste Code ist komplett selbstgeschrieben. Es ist ein Bruchstück eines Test-spiels was ich geschrieben hatte, um mir eine Idee der Kollision auf Selbstgemalter Pixellandschaft zu realisieren. Die echtzeitmanipulation von Pixellandschaften wie in Worms und Carnage Contest haben mich schon länger fasziniert ![]() ![]() Gruß, Phillipk |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab da noch was für dich:
BlitzMax: [AUSKLAPPEN] Graphics 800,600 |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, Master Midimaster ![]() Ich habe mich einmal an die Arbeit gemacht. Habe ein Programm geschrieben, was eine Simple Landschaft Zeichnet und sie als großes Bild abpacket. Danach wird jedes Tile davon gegrabbt (hab dem extra eine Methode gegönnt ![]() Hier der Code: BlitzMax: [AUSKLAPPEN] SuperStrict Hinweise: Im Mainloop gibt es 2 Drawmöglichkeiten - Bildteile einzeln zeichnen oder das Komplettbild. Umgeschalten wird mit einem druck auf ENTER - dann sollten weiße Linien zu erkennen sein, welche um die Kacheln rum gezeichnet wurden (DrawRect mit x-2,y-2, width=68 und height=68!) Das Ganze baut auf 2 Variablen auf, ResX und ResY - leider konnte ich sie nicht Konstant machen, da ich sie evtl ändern muss. Sie werden auf die nächstmögliche vielfache von 64 'runtergerechnet'- einfach irgendwas eintragen ![]() Res steht für 'Resolution' - bedeutet auflösung. Array-größe und slots etc werden damit berechnet. GrabMethode: Zum grabben habe ich 2 Programmteile. BlitzMax: [AUSKLAPPEN] Local posX:Int = 0, posY:Int = 0 Das ruft meine Grabmethode auf. posX und posY werden immer ein vielfaches von 64 sein, aufgrund des Step parameters. Und das hier: BlitzMax: [AUSKLAPPEN] Method GrabTile(posX:Int, posY:Int) Ist meine 'vorerst' lösung zum Grabben. Ich habe mich dazu entschieden, den Ursprungspunkt (Origin) um PosX und PosY nach links/oben zu verschieben, sodass mein gewünschtes Teil (was an PosX und PosY beginnen sollte!) auf 0,0 liegt. Dann schränke ich den zu Grabbenden bereich mit SetViewPorT(0,0,64,64) ein, Zeichne das Komplett_Bild und grabbe es in den entsprechenden Array eintrag. ----------------------- Jetzt kommt die erweiterung dieser Landschaft ![]() Ich habe mir direkt beim schreiben von TLandschaft 2 variablen gesichert, die die Aktuelle Y höhe beinhalten. Vllt wirds ja damit was ^-^ Midimaster hat Folgendes geschrieben: Zeichne von der Landschaft einen kompletten Bildschirm 1280x1024 voll, aber ziehe von den X-Koordinaten vor dem Zeichnen immer 1280 ab, male dafür bis X=2560.
Gelingt Dir das? Das ist mein jetziges Ziel, natürlich nach Kaffe aufsetzen und was essen ![]() Ich bedanke mich auf jedenfall erstmal recht herzlich für die mühe! Ich muss wohl wirklich an die hand genommen werden. Das ist aber auch mistig, immerzu habe ich ideen, baue mir KB große Quellcodes im Kopf zusammen und 80% davon sind nur warme luft, die anderen 20% alleine nicht zu gebrauchen und aus dem was überbleibt (==Null) fange ich ein Projekt an! <.< --------------- Edit 21.06.2011 - 07:02: So ein mist. Ich stelle grade fest, das ich das ganze nicht dynamisch genug durchdacht habe. Ich schreibe nun weite Teile neu, da ich sonst bei größeren Landschaften wie der Bildschirmbreite/höhe wieder probleme bekomme. Die grobe Logik bleibt bestehen, allerdings werde ich mehr darauf achten, in Methoden auszulagern, der ich sagen kann, welche TileimageSlots ich zeichnen möchte. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
das Gesamtbild komplett zu zeichnen und daraus dann einen Ausschnitt zu grabben, kann nicht die Lösung sein. Dies dauert zu lang.
Es muss Dir gelingen das Grabben direkt mit dem Random-Zeichnen zu verknüpfen. Nur so sparst Du Zeit. Oder, wenn Du schon alles zeichnest, dann musst du auch alles zur Verfügung stehende Bildmaterial gleich in mehrere Grabs zu sichern. Der SetViewport sollte sich ja auch auf die DrawLines einsetzen lassen... sieh dir mal mein letztes Beispiel an, ich habe es gestern nochmal überarbeitet. Wirst du in dem Spiel später auch senkrecht scrollen? oder nur dann, wenn die Landschaft zu hoch wird? d.h. wird es Spielzüge geben, bei der die Figur lange senkrecht nach oben oder unten laufen wird. Oder ist da immer der Übergang zwischen Wiese und Himmel zu sehen? |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dein letztes beispiel gefiel mir sehr gut ![]() ![]() Nun, ein wirkliches Spiel ist daraus nicht geplant. Es ist eher eine Spielerei und lernerei. Ich habe mich von anfang an mit 3D beschäftigt, da ist mir nie aufgefallen, wie einfach und grandios 2D sein kann. Das möchte ich nun ein wenig nachholen. Das scrollen ist so ne sache. Mir wärs am liebsten, wenn man in alle richtungen 'Scrollen' kann, oder zumindest eine relativ große Landkarte besitzt. Ich hatte sogar schon überlegungen angestellt, den RandomSeed für Landschaftsteile zu speichern, um es so später zu Rekonstruieren, aber das lasse ich lieber einmal. Im moment schreibe ich eine Funktion, die mir eine simple map mit boden malt, welche auf jedenfall größer wie der Bildschirm ist. Das ganze plane ich Rekursiv, dh eine funktion die jedesmal einen "Bildschirm" voll genereriert und in die entsprechenden Slots packt und sich danach erneut aufruft. Ps: Wenn ich das System soweit beherschen kann, wird es evtl doch ein kleines spielchen geben ![]() Edit 21.06.2011 - 09:37: So, mit ach und krach habe ich nun endlich etwas mehr hinbekommen. Hab den kompletten denkansatz nochmal verworfen, die alte idee und ein paar eindrücke durch Midimaster zusammengemixt, und nach zahllosen kleinen Bugs etwas entworfen. Leider immernoch verbuggt.. Wenn ich in TLandschaft zb die LastY variable zu "hoch" ansetze, wird überwiegend nur erde gezeichnet. Dieser code ist so gut wie unkommentiert, das war einfach nur ein schnelles niederschreiben. :/ BlitzMax: [AUSKLAPPEN] SuperStrict Ich werde mich nun dranmachen und ein Simpleres Zeichensystem schreiben, welches keine Images speichert, sondern aus jedem tile einen Seedwert zieht und ihn danach "füllt" - unterstützt werden nur simplere DrawLine geschichten. |
||
- Zuletzt bearbeitet von PhillipK am Di, Jun 21, 2011 9:43, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
das array mit 8000 reicht ja wohl erstmal für das demo.... ![]() das mit dem RandomSeed ist gar keine so blöde Idee, dadurch bist du in der Lage jeden Landschaftsteil zu rekonstruieren. Also. z.b. die Fortsetzung der Landschaft, wenn der Spieler an ihre Grenzen kommt. Ich habe mal versucht, was passiert, wenn man den Boden nur 1x zeichnet und dann als Textur in alle weiteren Streifen einsetzt. -> es ist ab 16px Breite nichts Nachteiliges zu sehen Auch den Himmel braucht man ja nicht mit in die Tiles zu speichern. So kannst Du die Geschwindigkeit zum Zeichnen eines Tiles nochmal um 25% drücken. bei meinem alten NoteBook messe ich Zeiten um 30-40msec. Wie sieht es bei Dir aus? BlitzMax: [AUSKLAPPEN]
ps. und schreib mir nicht gleich, dass du einen Fehler im Himmel gefunden hast. Das ist Absicht, damit man die Tile-Grenzen sieht ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich schau es mir mal an ![]() Das mit dem Fehler war keinesfalls eine ankreidung, ich bin froh das mir jemand hilft ![]() ![]() Ich überlege noch, wie ich die Rndseed eigenschaft nutzen kann, um meine Landschaft zu speichern. Das neu generieren der Flächen wäre aber nur mit einigen Unter-werten möglich ![]() Somit hätte ich zb 0-255 als "index", was für eine operation kommt und eine beliebig bestimmbare anzahl an werten, wie gedrawt wurde. Sollte ich das ganze die Tage mal in ein halbwegs anschauliches Packet geschnürrt haben, werd ichs mir als Type abpacken und der Community zur verfügen stellen *g* -------- So, ich verfolge nun einen weiteren Ansatz, den ich aus den bisherigen Erfahrungen gebastelt habe. Ich wollte ein System nutzen, was Teile vorfertigt und diese nach einem bestimmten system ablegt. Hintergrundgedanke ist, das ich eine Kachel in mehrere gleiche Teile unterteile, im moment peile ich 3x3 teile an. Nun kann von jedem dieser punkte eine linie zum anderen führen. Das ist schwer zu erklären, darum hier mal ein Bild dazu: ![]() Von jedem punkt wird eine linie zu jedem anderen punkt gezogen und gegrabt. Nun bastel ich shortWerte die für die bilder stehen und packe sie in einen Array[,] - welcher für die Kacheln der Landschaft stehen. Ein byte für X, ein byte für Y des Tiles-arrays. Beim generieren der map muss ich nun nurnoch darauf achten, das jede Kachel die zb auf 4 endet, neben sich eine hat, die mit 11 beginnt. Ebenso wie kacheln die mit einer 1 enden über sich eine kachel haben müssen, die mit 8 beginnt. Durch den vorteil der Frames könnte ich beim erstellen gleich mal 3-4 gleiche Tiles erstellen, die aber alle etwas anders gemalt sind, zb Unregelmäßiger oder ganz flach. Diese werte könnte ich mit in den Short-Array packen, indem ich ihn einfach auf Int aufstocke ![]() Ausserde könnte jedes Tile gleich noch einen Array anfertigen, Wo Kollision auf den entsprechenden Bildern existieren würde, bei bedarf werden sie einfach dort ausgelesen. Sollte es nun zu dem Fall kommen, das ein Tilestück verändert wird, könnte ich eine Kopie des Tile-bildes anfertigen und zb in eine TMap übertragen, wobei der Key mit der Short-zahl verknüpft wird ![]() Soviel zu meiner zukunftsmusik.. *grml* Klingt das nach einem Halbwegs brauchbaren system, eine größere 2D map zu erschaffen, welche dynamisch in alle richtungen beweglich ist? :3 Oder könnte es von mir noch nicht bedachte Schwachstellen geben? ![]() Hab bis jetzt die Tilezeichnung geschrieben, die allerdings mit DrawLine eine grade linie zwischen ihren Start und Zielpositionen schreibt. Wenn ich das soweit fertig hab, poste ich mal den Code ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group