Reveres Napisano Listopad 4, 2015 Zgłoś Udostępnij Napisano Listopad 4, 2015 (edytowany) 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ą. Edytowano Listopad 4, 2015 przez Reveres Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Madaoo Napisano Listopad 15, 2015 Zgłoś Udostępnij Napisano Listopad 15, 2015 Ten kod jest troszkę źle napisany, bo po co tworzyć wiele metod, które będą sprawdzać kolizje, Lepiej użyć wzorca projektowego typu Obserwator do klasy odpowiedzialnej od kolizji. Dodatkowo by nie robić wielu porównań wykorzystaj do optymalizacji algorytmu od zamiatania: http://jitter-physics.com/wordpress/?tag=sweep-and-prune 1 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.