Kleines Problem bei 2D Sandbox System
Übersicht

SchrolliBetreff: Kleines Problem bei 2D Sandbox System |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Forum,
ich versuche mich derzeit an einer kleinen 2D Sandbox. Zum verständniss: von oben fallen Sandkörner herunter und sollen dann unten liegen bleiben und sich auftürmen. Wenn daneben der Pixel noch frei ist, rutschen sie auseinander, sodass der Haufen an sich immer größer wird. Ich hoffe man versteht wie ich es meine. Im moment prüfe ich so, ob unter dem momentanen Plot der Pixel frei ist, und das Sandkorn somit weiter fallen DARF: BlitzBasic: [AUSKLAPPEN]
Wenn die Sandkörner auf ein Rect fallen bleiben sie da auch liegen, türmen sich aber nicht auf. Sie liegen quasi oben auf dem Rect und überlagern sich selbst. Macht ja auch Sinn, da ich ja erst nach einem neuzeichnen die schon liegenden Pixel prüfen kann. Ich habe im moment keine Ahnung wie ich das nun am besten lösen könnte und würde mich über Hilfe oder Denk anstöße, sowie evtl Befehls-Verweise freuen Grüß Basti ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nimm zumindest ein Array!
Code: [AUSKLAPPEN] Dim Feld.TSand()
Damit musst du nichz 100 Mio. Sandkörner gegeneinander prüfen sondern nur die Nachbarn. Und verzichte auf das Farben lesen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versteh nicht ganz wie das mit dem Array gemeint ist.
Woher weis ich denn was die Nachbar Körner sin? Immerhin ist das ja durch das auseinander rutschen alles durcheinander? Sorry aba kann der Taktik nicht ganz folgen |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Feld unter einem Sandkorn ist Feld(s\x, s\y+1). Felder in denen kein Sandkorn ist, sind NULL. Wenn sich ein Sandkorn bewegt, trägst du es aus dem Feld aus (= Null) und trägst es in einem anderen ein. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Xeres: Glaubst du wirklich, es ist gut den Bildschirm in ein Array aufzuteilen bei sowas?
So wie ich ihn verstanden hab will er Physik simulieren. Obs da so ratsam ist das mit nem Array zu machen weiß ich ehrlich gesagt nicht. Das müsste doch mit ner Physik Engine gehen, oder du schreinst dir sowas selvst. Lg, M0rgenstern |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ein array macht sinn, du hast ihn falsch verstanden | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ahhhh jetzt macht das ganze Sinn ![]() Oke das Prinzip an sich hab ich denk ich mla verstanden, aber wie ich das genau umsetzten soll weis ich noch net. Möchtest du mir evtl ein kleines Codebeispiel posten? Das zumindest ähnlich funktioniert. Grüße |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Graphics 320,240 edit: das ist völlig verbuggt, aber du siehst was ein array ist ![]() |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
funktioniert super, nur wird das ganze ab ner bestimmten größe schon extrem langsam.
gibts da schnellere möglichkeiten die ebenfalls einfach umzusetzen wären, oda wirds daran scheitern? Gruß basti |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function draw()
LockBuffer() For x=0 To 319 For y=0 To 239 If mat(x,y)=1 Then WritePixelFast x, y, $FFFFFF Next Next UnlockBuffer() End Function So müsste es wesentlich schneller gehen. |
||
1 ist ungefähr 3 |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst statt dem array auch gleich ein image als speicher benuzten, das kannst du dann mit drawimage malen, verschiedene farben stehen dann für verschiedene materialien | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das versteh ich aber nicht xD
Er soll es nicht mit ReadPixelFast machen, dafür mit einem Array, aber dann doch mit einem Bild, aus dem man dann auch mit ReadPixelFast lesen muss ? Einfach in dem Array eine andere Zahl für andere Materialien geben Code: [AUSKLAPPEN] 0 = Leer
1 = Sand 2 = Wasser 3 = Öl Oder was dir sonst noch einfällt. Dann musst du nur noch sagen, das wenn ein Sand auf ein Wasser Trifft, es durch das wasser geht, öl aber oben drauf bleibt... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
M0rgenstern hat Folgendes geschrieben: Glaubst du wirklich, es ist gut den Bildschirm in ein Array aufzuteilen bei sowas? Es ist schon mal besser, als alle Pixeldaten Linear hintereinander durch zu gehen, besonders wenn max. 8 Nachbarn gesucht werden. Weitere Optimierung wäre natürlich noch besser, darum "zumindest". Ob das in BB echtzeitfähig um zu setzen ist, bezweifle ich ein bisschen.
M0rgenstern hat Folgendes geschrieben: Das müsste doch mit ner Physik Engine gehen, oder du schreinst dir sowas selvst. Er schreibt ja gerade sowas selbst...
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
toeb: er soll es entweder mit nem array oder mit nem image machen, nicht aber mit einer mischung aus types und image.
ich weiß nicht ob das readpixelfast und drawimage nicht vllt schneller ist als in einem array schreiben und writepixelfast, hab ich nie ausprobiert |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group