Witam.
Mam taki kod:
public boolean isCollised(){
for(Collision c1:MyGdxGame.collisionManager.getCollisionList()){
if(!c1.equals(this)){
if(c1.overlaps(this)){
return true;
}
}
}
return false;
}
public boolean isCollOnRight(){
for(Collision c1:MyGdxGame.collisionManager.getCollisionList()){
if(!c1.equals(this)){
return (this.isCollised() && (this.x < c1.x) && (c1.x < this.x + this.width));
}
}
return false;
}
public boolean isCollOnLeft(){
for(Collision c1:MyGdxGame.collisionManager.getCollisionList()){
if(!c1.equals(this)){
return (this.isCollised() && (c1.x < this.x) && (this.x < c1.x + c1.width));
}
}
return false;
}
public boolean isCollOnTop(){
for(Collision c1:MyGdxGame.collisionManager.getCollisionList()){
if(!c1.equals(this)){
return (this.isCollised() && (c1.y < this.y + this.height) && (this.y + this.height < c1.y));
}
}
return false;
}
public boolean isCollOnBottom(){
for(Collision c1:MyGdxGame.collisionManager.getCollisionList()){
if(!c1.equals(this)){
return (this.isCollised() && (this.y < c1.y + c1.height) && (c1.y + c1.height < this.y + this.height));
}
}
return false;
}
I mam problem otóż taki:
Piszę grę 2D RPG("style") i chcę wykryć kolizje tylko z jednej strony, aby zablokować ruch w danym kierunku.
Napisałem taki kod, wzorowany na tutorialu z kolizji ale w C++, i kolizja dział w następujący sposób:
-Po uderzeniu gracza w obiekt z prawej storny, powyżej niż połowa tego obiektu, wykrywa że zderzenie gracza nastąpiło z góry i prawej strony, gdy jest gracz poniżej połowy obiektu to wykrywa jako zderzenie gracza od dołu i prawej strony.
-Po uderzeniu gracza w obiekt z lewej storny, powyżej niż połowa tego obiektu, wykrywa że zderzenie gracza nastąpiło z lewej i prawej strony, gdy jest gracz poniżej połowy obiektu to wykrywa jako zderzenie gracza od dołu i lewej strony.
-Po uderzeniu gracza w obiekt od dołu, powyżej niż połowa szerokości tego obiektu, wykrywa że zderzenie gracza nastąpiło z góry i prawej strony, gdy jest gracz poniżej połowy szerokości obiektu to wykrywa jako zderzenie gracza od dołu i prawej strony.
-Po uderzeniu gracza w obiekt od góry, powyżej niż połowa szerokości tego obiektu, wykrywa że zderzenie gracza nastąpiło z dołu i prawej strony, gdy jest gracz poniżej połowy szerokości obiektu to wykrywa jako zderzenie gracza od dołu i prawej strony.
Jak wyeliminować, aby zwracało tylko jedną kolizje w danym momencie, a dokładniej jak uderzę graczem o obiekt z lewej strony to wykrywa kolizje z prawej strony względem gracza jak napisałem to powyżej.
PS.: Dodam że w libGDX kordy 0,0 zaczynają się w lewym dolnym rogu, a nie jak standardowo lewy górny róg.
Proszę o pomoc i dziękuję za nią.