Author Topic: 2D Tile Engine Tutorial, Tilekollision und Scrolling  (Read 10214 times)

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
In bezug auf diesen Thread
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
//*.pdf und *.exe
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline Orpheus_2003

  • Mc. Print
  • *
  • Posts: 29
    • View Profile
    • CreativArtwork
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....

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5021
  • O Rly?
    • View Profile
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!
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline Orpheus_2003

  • Mc. Print
  • *
  • Posts: 29
    • View Profile
    • CreativArtwork
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

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10711
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Pixelgenau mit dem Boden gibt oft Probleme, weil man dann an einem Pixel h?ngen bleiben kann. Hatte ich in SEUCK ?fter.

Offline Orpheus_2003

  • Mc. Print
  • *
  • Posts: 29
    • View Profile
    • CreativArtwork
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

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10711
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Kein - wirklich "kein" Jump&Run hat pixelgenaue Kollisionen mit dem Hintergrund. Das l?uft alles ?ber die Tile-Koordinaten.

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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]......


I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5021
  • O Rly?
    • View Profile
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...)


I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
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 :)
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline Orpheus_2003

  • Mc. Print
  • *
  • Posts: 29
    • View Profile
    • CreativArtwork
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.

Offline Orpheus_2003

  • Mc. Print
  • *
  • Posts: 29
    • View Profile
    • CreativArtwork
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?

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10711
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
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.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5021
  • O Rly?
    • View Profile
Japp, weil alles eckig :)
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard