Seite 1 von 1
Längere 2D-Welt
Verfasst: 18.09.2006 17:17
von ComputerFreak_PB
Hi
Ich versuche, eine 2D-Welt zu gestalten. Man soll aber auch nach links und rechts gehen können. Nicht so wie bei Windows: Wenn die Maus links ist, geht es nicht weiter. Die Spielfigur soll nach links und rechts gehen können und der Bildschirm soll dabei mitscrollen. Geht das irgendwie?
Danke,
ComputerFreak_PB
Verfasst: 18.09.2006 18:49
von Zaphod
Natürlich geht das. Informiere dich mal über eine Technik die sich Tilemapping nennt.
Verfasst: 18.09.2006 19:12
von #NULL
aus deinem post geht leider nicht hervor, inwieweit du zumindest mit grundlegenden sachen zur darstellung vertraut bist..
zaphod hat hier schon mal einiges erklärt:
http://www.purebasic.fr/german/viewtopi ... ight=tiles
hier gibts ein einfaches map-beispiel, nur die bewegung findet mit tasten, nicht mit der maus statt:
http://www.purebasic.fr/german/viewtopi ... ht=#106177
..:
http://www.purebasic.fr/german/viewtopi ... hlight=map
Verfasst: 18.09.2006 19:23
von Kaeru Gaman
yo, ne TileMap ist das A und O für sowas.
eine durchgehende grafik würde extrem zuviel speicher brauchen.
such mal im forum, da gabs schon ne menge threads drüber.
auch in der Lounge wurde schon einiges über TileMaps geschrieben.
wenn dir dann konkrete fragen übrig bleiben, kannste ja noch mal nachhaken.
ganz einfach
Verfasst: 18.09.2006 20:18
von Brügge
du baust dir eine map aus bausteinen (jeder baustein soll gleichgroß sein) ein bausein ist z.B. Rasen, der andere Stein. jetzt brauchste nur 2 texturen. einmal den stein und den rasen. du erstellst einen array, der deine map sein soll:
Dim map(1000,1000)
jetzt musst du dir überlegen wie du jedes einzelnde Feld änderst(um deine map zu gestallten) wenn du das geschaft hast, dann musst du dir die größe deiner beiden bilder angucken(die müssen gleich groß sein!) und jetzt gibt es eine kleine formel um die anzuzeigen und die ganze map zu verschieben. achja die einzelnen felder sollten quadratisch sein:
x = 100 ;dies ist deine spielfigur (x achse)
y = 100 ;dies ist deine spielfigur (y achse)
for i = 0 to 1000
for j = 0 to 1000
displaysprite(map(i,j),i*bildlänge+x,j*bildlänge+y)
next j
next i
flipbuffers()
clearscreen(0)
Verfasst: 18.09.2006 20:24
von Kaeru Gaman
@Brügge
es ist Unfug und für die Performance tödlich, ständig die Komplette Map zu Displayn.
man sollte immer nur einen Auschnitt darstellen, der grade so groß ist, den gesamten screen zu füllen.
z.b. für 32x32 Tiles auf nem 800er screen:
Code: Alles auswählen
For t=0 to 19
For n=0 to 25
DisplaySprite(#Tilesetstart + Map( MapX + n, MapY + t ), FineScroll_X + 32 * n - 32, FineScroll_Y + 32 * t -32)
Next
Next
Verfasst: 19.09.2006 17:41
von ComputerFreak_PB
ok. danke
Verfasst: 20.09.2006 15:56
von Brügge
@kaeru
das habe ich in meinen spielen auch aber ich wusste jetzt nicht welche auflösung er nimmt und daher weiß ich auch nicht wie viele bausteine in einem fenster passen ....
Verfasst: 20.09.2006 15:59
von Tafkadasom2k5
Hä? X und Y-Pixelwerte des Bildschrims kann man doch auslesen?
X_WertDesBildschirms/X_GrößeDerTiles = XAnzahl
Y_WertDesBildschirms/Y_GrößeDerTiles = YAnzahl
Wo ist denn da das Problem...
Gr33tz
Tafkadasom2k5