kollision mit tiles?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

frigi

Betreff: kollision mit tiles?

BeitragFr, Mai 07, 2004 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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........ Confused (ich muss auchnoch jedes tile einzeln prüfen, da es immer andere auswirkungen hat)
kann mir da jemand helfen?

Hubsi

BeitragFr, Mai 07, 2004 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab das mal eben aus meinem letzten Projekt rauskopiert:
Code: [AUSKLAPPEN]
tc(0)=map((sx(a)+16)/32,(sy(a)-2)/32)  ; Oben
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
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.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Kabelbinder

Sieger des WM-Contest 2006

BeitragFr, Mai 07, 2004 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Hubsi

BeitragFr, Mai 07, 2004 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum verwendest Du hier einen String?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Level$ ?

BeitragFr, Mai 07, 2004 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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>

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Ups

BeitragFr, Mai 07, 2004 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja, stimmt, die "0" hinterm dem Gleichheitszeichen muss in Anführungsstriche!
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Hubsi

BeitragFr, Mai 07, 2004 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Hmmm

BeitragFr, Mai 07, 2004 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich glaube, so machen das Profis, wie du Smile

Aber ich erstelle die .txt s nicht mit BB, sondern gebe alles stur per hand ein.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

frigi

BeitragFr, Mai 07, 2004 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
also, erstmal danke!
wer mich da morgen mal dransetzen, da ich jetz leider keine zeit mehr hab Sad

frigi

BeitragSa, Mai 08, 2004 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
also leuts, ich raffs nich! Confused
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

BeitragSa, Mai 08, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

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 Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

frigi

BeitragSa, Mai 08, 2004 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
öhm, ich kann da nix runterladen: Diese Seite wurde nicht gefunden!

Hubsi

BeitragSa, Mai 08, 2004 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 08, 2004 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie ich das verstehe malst du Levels mit z.B Paint und zeichnest einfach? So wird das nix Wink Guck mal auf robsite.de unter BB Tutorials. Dort gibt es ne ganze Reihe von RPG Tutorials. Da wird eine Tileengine und ein Tileeditor beschrieben.

at hubsi:

Der Bad Man II Quellcode geht wirklich nicht Wink

frigi

BeitragSa, Mai 08, 2004 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 08, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Tausendmal sorry! Ich bin ein Idiot! Aber jetzt gehts wirklich Embarassed
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

frigi

BeitragSo, Mai 09, 2004 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, jetzt is die ganze seite down^^

Hubsi

BeitragSo, Mai 09, 2004 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Diesmal kann ich wenigstens nichts dafür Very Happy Der Server hat meine Mitgliedschaft offensichtlich in die Tonne getreten. Ich such gerade kostenlosen Space mit php und MySQL. Sollte in einer Stunde wieder funzen. Stay tuned Razz

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 Evil or Very Mad
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

frigi

BeitragMo, Mai 10, 2004 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich hab mich jetzt mal duch massig rpg- und jump-tuts gearbeitet, aber keins kann mir da helfen Sad
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

BeitragMo, Mai 10, 2004 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ungünstig da sehr viel rechenaufwand. Benutze besagten Code:Code: [AUSKLAPPEN]
oben=map((sx+16)/32,(sy-2)/32)  ; Oben
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
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.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group