kollision mit tiles?
Übersicht

![]() |
frigiBetreff: kollision mit tiles? |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich wollt meine maps für mein kleines ballerspiel mal aus tiles bauen, was auch ganz gut funktioniert. (siehe seite 273/274 im spiele programmieren....)
will jetzt aber natürlich auch abfragen, wenn der spieler mit nem tile kollidiert, komm da aber leider nicht weiter........ ![]() kann mir da jemand helfen? |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab das mal eben aus meinem letzten Projekt rauskopiert:
Code: [AUSKLAPPEN] tc(0)=map((sx(a)+16)/32,(sy(a)-2)/32) ; Oben
Ich gehe dabei von einer Tilegröße von 32*32 Pixel und einer Spielfigurgröße von 32*32 Pixel aus. Errechnet wird die Nummer des Tiles.
tc(1)=map((sx(a)+32)/32,(sy(a)+16)/32) ; Rechts tc(2)=map((sx(a)+16)/32,(sy(a)+32)/32) ; Unten tc(3)=map(sx(a)/32,(sy(a)+16)/32) ; Links tc(4)=map((sx(a)+16)/32,(sy(a)+16)/32) ; Mitte |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab mal ein Plattformspiel gemacht wo man auch wissen musste, auf welchen
Tile sich der Spieler gerade befindet, das habe ich so gemacht: Code: [AUSKLAPPEN] If Level$((xpos + 8) / 20,(ypos + 8) / 20) = 0 Then
tot = 1 xpos = xstart ypos = ystart EndIf Damit kannst du jetzt sicher nicht soviel anfangen, daher hier ein paar Erläuterungen: -Tiles lese ich eigentlich immer aus .txt Datein, d.h. Level$(x,y) ist das Dimensionsfeld, in dem die tiles Gespeichert sind. -Wenn man das Level so aufbaut, bewegt sich der Spieler also quasi über die einzelnen Angaben, die in Level$(x,y) gespeichert sind. -Um zu prüfen, auf welchem Tile [welcher "Angabe"] der Spieler also gerade ist, teilt man die x- und Ycoordinate der Spielfigur durch die größe der einzelnen Tiles [hier 20]. Das +8 ergibt sich dadurch, dass man überprüft, ob die Mitte das Tile berürt, nicht wie gewohnt der linke, obere Punkt. -Wenn du überprüfen möchtest, ob man das Tile überhaupt berührt, musst du eine überprüfung sowohl für den linken, oberen, alsauch für den rechten unteren Punkt machen, etwa so: Code: [AUSKLAPPEN] If Level$((xpos) / 20,(ypos) / 20) = 0 Or Level$((xpos + 20) / 20,(ypos + 20) / 20) = 0 Then
tot = 1 xpos = xstart ypos = ystart EndIf Ich hoffe, ich habe dich damit nicht noch mehr verwirrt, Also, viel Erfolg. ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum verwendest Du hier einen String? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Level$ ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, das hab ich so aus Renes Buch gelernt.
Die Strings kann man ja mit Select und Case mit Bildern assozieren oder zur not mit Int() in zahlen verwandel. Aßerdem wüsste ich nicht, wie eigenhändig Bytes ist eine .txt Datei Schreiben sollte. Wie mahst du das denn immer? |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Ups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achja, stimmt, die "0" hinterm dem Gleichheitszeichen muss in Anführungsstriche! | ||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Speichern:
Code: [AUSKLAPPEN] For y=0 To mapheight
For x=0 To mapwidth WriteByte(stream,map(x,y)) Next Next Lesen: Code: [AUSKLAPPEN] For y=0 To mapheight
For x=0 To mapwidth map(x,y)=ReadByte(stream) Next Next Die 0-Sache muß nicht sondern kann ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
KabelbinderSieger des WM-Contest 2006Betreff: Hmmm |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ich glaube, so machen das Profis, wie du ![]() Aber ich erstelle die .txt s nicht mit BB, sondern gebe alles stur per hand ein. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, erstmal danke!
wer mich da morgen mal dransetzen, da ich jetz leider keine zeit mehr hab ![]() |
||
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
also leuts, ich raffs nich! ![]() bisher hatte ich es so gemacht, dass man mit nem malprogramm einfach einen level zeichnet und dann der spieler so drüberläuft: Code: [AUSKLAPPEN] If Not ImagesCollide(level,0,0,0,spieler,x,y,0) And sprung=0
y=y+2 EndIf If ImagesCollide(level,0,0,0,spieler,x,y,0) And sprung=0 y=y-2 EndIf aber dadurch würde das spiel ja gigantisch groß werden, wenn man mal ein paar mehr levels haben will und scrolling is dann ja auch noch so ne sache.... und sowas in der art bräucht ich jetzt halt mit tiles. aber is wohl nich so einfach. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht hat hier noch jemand das Tut von Lasse? (habs selber leider schon vor geraumer Zeit gelöscht) Da ist auch gleich eine Sprungfunktion dabei. Das ganze dann noch auf Übersicht frisiert und schon hast Du die optimale Lösung für alle tilebasierten Games ![]() P.S.: Auf shit-seite.de gibts den Quellcode zu BadMan II zum saugen. Das arbeitet mit der optimierten Tilegeschichte. Und wenn ihr lange genug bettelt lad ich auch den Code von Bastard hoch... Ne, Quatsch ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
öhm, ich kann da nix runterladen: Diese Seite wurde nicht gefunden! | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eigentlich nicht möglich. Ich verlink das mal direkt:http://www.shit-seite.de
Edit: Hab das grad mal getestet, funzt 8) |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So wie ich das verstehe malst du Levels mit z.B Paint und zeichnest einfach? So wird das nix ![]() at hubsi: Der Bad Man II Quellcode geht wirklich nicht ![]() |
||
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
bis jetzt hab ichs so gemacht, da ich mich zuerst auf den rest konzetriert hab!
es war mir von anfang an klar, dass des so nich hinhaut.... es funzt nit!!!!!!!!!!!!!!!!!!!!!!! was da los, hubsi?! |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tausendmal sorry! Ich bin ein Idiot! Aber jetzt gehts wirklich ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm, jetzt is die ganze seite down^^ | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diesmal kann ich wenigstens nichts dafür ![]() ![]() Edit: So, die Seiten stehen wieder. Nur die Bastardhighscores sind nun kaputt, da ich die Daten bis jetzt nicht wiederherstellen konnte. Danke an die Verantwortlichen des Servers ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, ich hab mich jetzt mal duch massig rpg- und jump-tuts gearbeitet, aber keins kann mir da helfen ![]() wäre es denn möglich, dass ich irgentwie die x- und y-koordinaten jedes einzelnen, gemalten tiles in eine variable speichere, und die dann bei der kollisionsabfrage verwende? |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ungünstig da sehr viel rechenaufwand. Benutze besagten Code:Code: [AUSKLAPPEN] oben=map((sx+16)/32,(sy-2)/32) ; Oben
In den Variablen stehen dann die Nummern der Tiles mit denen die Spielfigur rundherum kollidiert. map ist hierbei das Map-Array, sx und sy sind die Spielerpositionen.
rechts=map((sx+32)/32,(sy+16)/32) ; Rechts unten=map((sx+16)/32,(sy+32)/32) ; Unten links=map(sx/32,(sy+16)/32) ; Links mitte=map((sx+16)/32,(sy+16)/32) ; Mitte |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group