Skocz do zawartości

Recommended Posts

Napisano (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 przez Reveres
  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...