GLBasic forum

Main forum => Tutorials => Topic started by: D2O on 2009-Sep-27

Title: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: D2O on 2009-Sep-27
In bezug auf diesen Thread
http://www.glbasic.com/forum/index.php?topic=3513.0 (http://www.glbasic.com/forum/index.php?topic=3513.0)
habe ich mal ein kleines Tutorial geschrieben.

Erstellt werden 3 Layer, 2 davon per zufall.
Von der Playerposition abh?ngiges Mapscrolling.
Einfache Tile Kollision, Oben, Unten, Links und Rechts.
Und nur Zeichenen und berechnen was auf dem Screen sichtbar ist.

Ich hoffe, da ich kein besonders guter schreiberling bin, das es f?r Euch trotzdem
gut lesbar und verst?ndlich ist.

TileTutorial.zip (http://www.deuteriumoxid.com/glbasic/TileTutorial.zip)
//*.pdf und *.exe
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Sep-28
Wow.

Danke D2O.
Hat mir geholfen. Sehr gutes Tut.
Das Problem mit der Pixelgenauen Kollision hab ich auch gerade.
Aber keine L?sung.
Mit Boxen ist es zu ungenau. Und die Pixelgenaue Koll ist zu langsam..
Echt er Hund drine...

Thx for your Tutorial....
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Schranz0r on 2009-Sep-28
Du setzt die "Hitbox" innerhalb des K?rpers, ist doch wurscht ob dir da ein paar Pixel fl?ten gehen bei der Kollision :)

Machen gro?e Games wie Super Mario Bro. , Giana Systers usw, auch!
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: D2O on 2009-Sep-28
Oder Du machst eine Pixelgenaue Kollision eben nur dann wenn z.B. rechts neben den Player/Hero etwas zu ?berpr?fen ist.
Dann wird die kollison nur f?r das eine Objekt und nur zu diesem Zeitpunkt gemacht.
Wie schon gesagt, es f?hren viele wege nach Rom.

Sodele, muss mich langsam wieder fertig machen f?r die Maloche ;)
Heut scheint ein reger Verkehr nach Bregenz zu sein :(

Und Danke f?r das f?r Feedback.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Sep-29
Hmm.

Ja. Aber mein Player hat auch Kollision nach unten.Boden.
Das ist auch bei mir im Moment Pixelgenau gel?st.
Aber ich finde schon noch ne L?sung.
Thx
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Kitty Hello on 2009-Sep-29
Pixelgenau mit dem Boden gibt oft Probleme, weil man dann an einem Pixel h?ngen bleiben kann. Hatte ich in SEUCK ?fter.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Sep-30
Hi.

Nein. Definitiv nicht. Ich hab keine Probleme mit h?ngen bleiben am Boden.
K?nnt es ja gerne mal testen. Siehe signatur.

Aber.
Welche L?sung gibt es hier.
Wie schon erw?hnt. Das Level wird mit einem Offset (-32 / +32) gescrollt.
Ein Abfrage der Tiles unter dem player ist seehr ungenau.
Ich w?sste nicht wie man das ohne Pixelkollision genau herkriegt?

Gru? M
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Kitty Hello on 2009-Sep-30
Kein - wirklich "kein" Jump&Run hat pixelgenaue Kollisionen mit dem Hintergrund. Das l?uft alles ?ber die Tile-Koordinaten.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: D2O on 2009-Sep-30
Hmmm,
ich hab mal das hier aus dem Tutorial um SPRCOLL erweitert.
Code: GLBasic [Select]
        /// Das hier----------------------------------------------------------------------<<<<<<<<<<<<<<<<<<<<<<<<<
                        IF y1+1 <= endey
                                IF layer1[x1][y1] = -1 AND layer1[x1][y1+1] = 1
                                        DRAWRECT posx + x1*tile,posy + y1 * tile,tile,tile,RGB(0xff, 0x80, 0x00)
                                       
                                        /// mit SPRCOLL()
                                                IF SPRCOLL(tile1,posx + x1*tile, posy + y1 * tile,player,posx + x1*tile, posy + y1 * tile) // <<<<<<<<<<
                                                        ctrl_u = 1
                                       
                                                ENDIF //<<<<<<<<<<<<<<<<<<
                                ENDIF

                                IF layer1[x1][y1] = -1 AND layer1[x1][y1+1] = 0 THEN    ctrl_u = 0
                                ENDIF
        ///  ______-------------------------------------------------------------------_______<<<<<<<<<<<<<<<<<<<<<<

 

Es kann dann aber immer noch ?berschneidungen mit dem boden darunter links und darunter rechts geben, so das der player unter umst?nden
immer noch durchlaufen kann.
Man sollte aber die Position des Players zwischenspeichern und dann zur?cksetzen.
Oder man pr?ft zus?tzlich die felder links und recht darunter mit.

Code: GLBasic [Select]
// links darunter
IF layer1[x1-1][y1+1]......

Code: GLBasic [Select]
// rechts darunter
IF layer1[x1+1][y1+1]......


Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Schranz0r on 2009-Sep-30
SPRCOLL w?rde ich niemals bei Tilemaps verwenden, das gibt immer probleme und ist sau langsam (Bleibst evtl schon bei einen Pixel h?ngen, kann echt nervig sein...)


Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: D2O on 2009-Oct-01
Naja, das Sau langsam ist Relative.
Sicher braucht man das meistens nicht, aber wenn doch?
Hier wird eh "nur das tile direkt darunter ?berpr?ft, sonst kein anderes.

Ich glaube das ich am WE nochmals hinsetzen muss, um das ganze mal zu erweitern,
nicht versprochen, aber auf der Todo :)
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Oct-01
Nochmals.

1. Ist die Pixelgenaue Kollision nicht langsam und "frisst" sich auch nicht fest an einem Pixel.
2. Hab ich versucht das ganze mit Tiles umzusetzen. Aber das hat ?berhaupt nicht funktioniert.
 
Man lernt ja nie aus. Mal sehen was sich machen l?sst.

Thx for your instructions.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Oct-07
So.
Eine Frage hab ich aber noch.
Angenommen das Tile unter dem Player sit eine abgerundete Fläche, Bogen.
Wie steht der Player dann da drauf.
Wenn nur das Tile geprüft wird ist doch der ganze Bereich ein aktives Teil.
Stehen kann er aber nur auf den Pixeln.
Das würde doch komplett bescheuert aussehen wenn der Player auf dem Tile steht und in der Luft hängt.
Wie löst man so was?
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Kitty Hello on 2009-Oct-07
Hehehe. Früher habe ich sowas gelöst, indem ich wusste Teil 122 ist nach rechts unten schräg. Dann hab' ich den Spieler weiter runter zugelassen bis er auf den Boden trifft. Giana Sisters und das alte Mario hat sowas nicht.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Schranz0r on 2009-Oct-07
Japp, weil alles eckig :)
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Orpheus_2003 on 2009-Oct-08
So. Sehe ich das nun richtig.
Wenn ich wirklich nicht nur rechteckige Tiles habe geht das ganze nicht.
Außerdem hab ich gemerkt, dass die Kollision mit den Tiles einfach nicht so genau ist.
Hab mal probehalber den Code auf Collboxen gemacht, aber durch die Gravity und das scrollen mit dem offset ist das ganze schwierig zu handeln.
Man muss auch diagonal anfragen usw.
Also so ganz toll finden tu ich die Collboxen nicht.
Und heutzutage ist doch eine pixelgenaue Kollision kein Thema mehr.
Leistung ist doch überall vorhanden. So einen alten Laptop gibts doch gar nicht mehr, dass es mit pixelgenauer Kolli zu viel Ressourcen braucht?
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Kitty Hello on 2009-Oct-08
Ja, dann mach's mit SPRCOLL. Hab ich in SEUCK auch so gemacht. Du musst halt ein Rechteck als Spieler-Sprite verwenden, damit Du nicht hängen bleibst.
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Schranz0r on 2009-Oct-08
Ich hab 4 Boxcolls gemacht gehabt bei Giana Sisters ( ruhe in frieden  :'(  )
 
so war es easy abzufragen wo man jetzt andutscht :)
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Kitty Hello on 2009-Oct-09
Deffo! Aber Giana hat auch keine schrägen Böden ;)
Title: Re: 2D Tile Engine Tutorial, Tilekollision und Scrolling
Post by: Schranz0r on 2009-Oct-09
Thats right!