Hey Leute,
ich bin grade dabei, ein kleines Spiel zu programmieren, habe jetzt aber ein Problem bei der Kollisionsabfrage des Spielers mit seiner Umgebung. Der Spieler glitcht nämlich manchmal in die Blöcke des Bodens, sodass noch genau der oberste Pixel des Spielers nicht im Boden ist. Sonst funktioniert die Kollisionserkennung fehlerfrei. Hier der Code der Kollisionsabfrage:
Java:
//Returns true if the player has intersects with any blockpublicsynchronizedbooleanhasIntersectsWithBlock(){//The player's hitBoxRectangle hitBox =this.hitBox;//The block the player's position (top left corner) is inPoint playerBlock = manager.getBlockPositionInGame((int)getPosX(),(int)getPosY());//HitBox for any block (size is always the same, position can be changed for every blockRectangle blockHitBox =newRectangle();//Adjust the size of the block hitBox
blockHitBox.setSize(BlockInfo.SIZE,BlockInfo.SIZE);//Loop through all the blocks which have to be checked for intersectsfor(int i =(int) playerBlock.getX(); i <(int) playerBlock.getX()+Player.numberOfIntersectBlockChecksX; i++){for(int k =(int) playerBlock.getY(); k <(int) playerBlock.getY()+Player.numberOfIntersectBlockChecksY; k++){//Check if the block is not air (ID 0=air)if(manager.level.blockIDs[i][k]!=0){//Adjust the location of the block hitbox
blockHitBox.setLocation(i*BlockInfo.SIZE, k*BlockInfo.SIZE);//Check for intersectsif(hitBox.intersects(blockHitBox))returntrue;}}}returnfalse;}
Und hier noch eine Methode, die ich aufrufe:
Code:
//Returns the coordinates of the block in which the given virtual point in the game is in
public Point getBlockPositionInGame(int posX, int posY){
int blockPosX = (int) posX/BlockInfo.SIZE;
int blockPosY = (int) posY/BlockInfo.SIZE;
return new Point(blockPosX, blockPosY);
}
Hey,
ich habe die Methode intersects(Rectangle r) der Klasse Rectangle aufgerufen.
Das gibt doch zurück, ob die beiden Rechtecke irgendwelche Schnittstellen miteinander haben,
oder verwechsle ich da was?
LG Triton171
Intersects gibt genau das zurück, was der Name schon sagt, und zwar ob sie überlappen.
Also ja, im Grunde gibt es zurück ob es einen gemeinsammen Punkt gibt.
Ich hab es jetzt gelöst, auch wenn ich nicht weiß, wo der Fehler war.
Ich hab einfach die Methode neu geschrieben und jetzt funktionierts...
LG Triton171