2016-12-05 1 views
0

J'ai finalement obtenu la détection de collision en utilisant intersects() entre 2 rectangles, et il semble fonctionner. Cependant, le joueur est simplement coincé dans le rectangle et ne peut pas bouger. Donc j'essaie maintenant de vérifier la collision avant que le joueur ne bouge.Détection de collision Java avant de vous déplacer

Voici ce que j'ai essayé:

if(up == true){ 
     Rectangle futurerect = new Rectangle(px,py-=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py-=5; 
      repaint(); 
     } 
    } 
    if(down == true){ 
     Rectangle futurerect = new Rectangle(px,py+=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py+=5; 
      repaint(); 
     } 
    } 
    if(left == true){ 
     Rectangle futurerect = new Rectangle(px-=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px-=5; 
      repaint(); 
     } 
    } 
    if(right == true){ 
     Rectangle futurerect = new Rectangle(px+=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px+=5; 
      repaint(); 
     } 
    } 

Je viens de créer un nouveau rectangle mais où il serait si le joueur se déplace, et vérifier si elle entre en collision. Si c'est le cas, ne bouge pas. Le problème est que lorsque le joueur se déplace dans le rectangle, il ralentit simplement. Il se déplace toujours à travers le mur, mais se déplace à un rythme plus lent pour une raison quelconque.

Qu'est-ce qui cause ce problème?

Répondre

1

Il semble que vous ne vérifiez pas la zone correcte parce que votre instanciation d'un nouveau rectangle incrémente/décrémenter le py ou px et en lui attribuant cette valeur dans le constructeur de rectangle. Donc, si vous avez un joueur à 0,0 en cartésien et que vous voulez savoir s'il bouge, il va frapper un mur.

if (up == true) { 

    Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

    if(!futurerect.intersects(wallexample)){ 
     py-=5; 
     repaint(); 
    } 
} 

py est maintenant défini sur -5 une fois que vous instanciez le rectangle.

Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

en raison de py = 5 dans le deuxième paramètre. Lorsque vous effectuez l'inspection des intersections, vous regardez 0, -5. Une fois que cela dit "Oui, pas de mur ici", vous décrémentez le py un autre 5. Maintenant, nous avons un joueur coord px, py de 0, -10 et vous n'avez pas vérifié pour un mur à cet endroit.

Essayez fixer la logique ici, donc il n'attribue pas la nouvelle valeur à px/py:

Rectangle futureRect = new Rectangle(px, py - 5, 81, 150); 
+0

Ah, je vous remercie, je vois mon erreur maintenant. – joey942