2012-10-12 5 views
0

Je travaille actuellement sur un jeu de plateforme relativement simple qui a un bug étrange. Vous commencez le jeu en tombant sur le sol (vous partez à quelques blocs au-dessus du sol), mais quand vous atterrissez, vos pieds restent bloqués à l'intérieur du monde et vous ne pouvez pas bouger avant de sauter. Voici ce que je veux dire:Erreur de détection de collision

http://i.imgur.com/IKLZY.png

pieds du joueur sont quelques pixels en dessous du niveau du sol. Cependant, ce problème ne se produit que dans trois endroits de la carte et seulement dans ces trois endroits sélectionnés. Je suppose que le problème réside dans mon code de détection de collision, mais je ne suis pas entièrement sûr, car je ne reçois pas d'erreur quand cela arrive.

public boolean isCollidingWithBlock(Point pt1, Point pt2) { 
//Checks x 
    for(int x = (int) (this.x/Tile.tileSize); x < (int) (this.x/Tile.tileSize + 4); x++) { 
//Checks y 
     for(int y = (int) (this.y/Tile.tileSize); y < (int) (this.y/Tile.tileSize + 4); y++) { 
      if(x >= 0 && y >= 0 && x < Component.dungeon.block.length && y < Component.dungeon.block[0].length) { 
//If the block is not air 
       if(Component.dungeon.block[x][y].id != Tile.air) { 
        //If the player is in contact with point one or two on the block 
        if(Component.dungeon.block[x][y].contains(pt1) || Component.dungeon.block[x][y].contains(pt2)) { 
//Checks for specific blocks 
         if(Component.dungeon.block[x][y].id == Tile.portalBlock) { 
          Component.isLevelDone = true; 
         } 
         if(Component.dungeon.block[x][y].id == Tile.spike) { 
          Health.health -= 1; 
          Component.isJumping = true; 

          if(Health.health == 0) { 
           Component.isDead = true; 
          } 
         } 
         return true; 
        } 
       } 
      } 
     } 
    } 

    return false; 
} 

Ce que je demande est comment je réglerais le problème. J'ai regardé mon code pendant un bon moment et je ne suis pas sûr de ce qui ne va pas. Aussi, s'il y a un moyen plus efficace de faire ma vérification de collision, alors s'il vous plaît faites le moi savoir!

J'espère que c'est assez d'informations, si ce n'est pas seulement dites-moi ce dont vous avez besoin et je vais être sûr de l'ajouter.

Merci!

+0

Quelle est votre question? –

+0

Ajouté. Désolé pour ça. – Connor

+0

Avez-vous utilisé un débogueur ou ajouté des instructions SOP pour afficher les valeurs des variables dans les situations que vous avez décrites? C'est là que je vous suggère de commencer. Apprendre à déboguer du code est tout aussi important pour une compétence que d'apprendre à l'écrire en premier lieu. –

Répondre

0

Le problème n'est probablement pas votre contrôle de collision, mais votre logique de ce qu'il faut faire lors d'une collision. Votre personnage tombe dans le bloc qui, une fois, est toujours en collision avec le bloc. Donc, il ne sera pas capable de sauter (puisque vous vérifiez la collision en sautant je suppose). Lorsque vous vérifiez la collision, vous devez vous assurer que votre personnage ne tombe pas dans le bloc en effectuant une pré-vérification et un ajustement.

if (will collide) { 
    put beside block 
} 

Vous faites probablement quelque chose comme

if (colliding) { 
    stop moving 
} 

Lorsque vous mettez à côté cependant, vous devez vérifier la manière dont vous vous déplacez et que vous ne déplacez pas en blocs.