/ / Libgdx Rectangle Wall Collision - libgdx, detekcia kolízií, obdĺžniky

Libgdx Rectangle Wall Collision - libgdx, detekcia kolízie, obdĺžniky

Snažil som sa nájsť / vytvoriť kolíziudetekcia obdĺžnikov v Libgdx, ale nemôžem sa zdržiavať kdekoľvek.Mám obdĺžnik nazývaný vedierko so šírkou a výškou 64 a obdĺžnik s názvom stenu so šírkou a výškou 64. Snažím sa urobiť tak, aby hráč nebol prechádzať cez obdĺžnik a môže pokračovať v pohybe pri prichytení na stenu bez postupného prechodu alebo náhodného teleportovania. Moja metóda funguje vtedy, keď je 1 blok, ale keď je viac ako jedna, jednoducho sa zlomí a nefunguje.

Viem, že táto metóda je škaredá, ale je to len experimentovanie

private void checkCollisions(Rectangle bucket, Wall wall){
if(bucket.overlaps(wall.getRectangle())){
if(bucket.x > wall.getRectangle().x - 64 && bucket.x < wall.getRectangle().x - 55){
//collision with right side
bucket.x = wall.getRectangle().x - 64;
}
if(bucket.x < wall.getRectangle().x + 64 && bucket.x > wall.getRectangle().x + 55){
//collision with left side
bucket.x = wall.getRectangle().y + 64;
}
if(bucket.y < wall.getRectangle().y + 64 && bucket.y > wall.getRectangle().y + 55){
//collision with top side
bucket.y = wall.getRectangle().y + 64;
}
if(bucket.y > wall.getRectangle().y - 64 && bucket.y < wall.getRectangle().y - 55){
//collision with bottom side
bucket.y = wall.getRectangle().y - 64;
}
}
}

Bol by som veľmi vďačný, keby mi niekto mohol poukázať správnym smerom alebo zdieľať nejaký kód, ktorý by mi pomohol.

odpovede:

1 pre odpoveď č. 1

v LibGDXpri pohľade na detekciu kolízie musíte najprv poznamenať dva dôležité aspekty predvoleného systému súradníc LibGDX.

  • Keď nakreslíte obrázok, jeho (x, y) súradnica je vľavo dole obrazu
  • (0,0) je dolná ľavá strana obrazovky

Pomocou týchto informácií môžeme opraviť vašu logiku kolízií na nasledovné:

private void checkCollisions(Rectangle bucket, Wall wall){
if(bucket.overlaps(wall.getRectangle())){
if(bucket.x + 64 > wall.getRectangle().x && bucket.x < wall.getRectangle().x){
//collision with right side of bucket
}
if(bucket.x < wall.getRectangle().x + 64 && bucket.x > wall.getRectangle().x){
//collision with left side of bucket
}
if(bucket.y + 64 > wall.getRectangle().y && bucket.y < wall.getRectangle().y){
//collision with top side of bucket
}
if(bucket.y < wall.getRectangle().y + 64 && bucket.y > wall.getRectangle().y){
//collision with bottom side of bucket
}
}
}

Táto metóda určuje, ktorá strana vedro zistila kolíziu s predvoleným súradnicovým systémom LibGDX.