2017-11-07 8 views
-3

Die intersects Funktion gibt true zurück, jedes Mal zurückkehrt, selbst wenn nichtdurchteuft wahr jedes Mal

public Block IsColliding(Texture2D texture) 
    { 
     foreach (Block block in currentWorld.blocks) 
     { 
      if (texture.Bounds.Intersects(block.texture.Bounds)) return block; 
     } 
     return null; 
    } 

kollidiert ich diesen Code verwenden, um zu sehen, ob der Spieler mit etwas

+0

Ich kann keine Überladung von 'Intersects' finden [https://msdn.microsoft.com /en-us/library/microsoft.xna.framework.rectangle.intersects.aspx], die eine Texture2D und ein 'Rectangle' verwendet. Es erscheint auch seltsam, dass Sie eine Methode für ein Objekt ** aufrufen und dieses Objekt als Parameter übergeben. Ist das der _exact_ Code, den du benutzt? –

+0

Überprüfen Sie den Code jetzt, ich habe etwas versehentlich hinzugefügt – Ahmedm

+0

Haben Sie es im Debugger ausführen und sehen, was das Rechteck Grenzen sind, wenn nicht kollidiert? –

Antwort

0

in der Welt kollidiert hielt ich es mit und stattdessen verwenden ich meine eigene Mathe
hier ist der Code, wenn jemand will es

public bool Intersects(Vector2 texture1, Vector2 textureSize1, Vector2 texture2, Vector2 textureSize2) 
    { 
     if (texture1.X < texture2.X + textureSize2.Y && texture1.X + textureSize1.X > texture2.X && texture1.Y < texture2.Y + textureSize2.Y && texture1.Y + textureSize1.Y > texture2.Y) return true; 
     return false; 
    } 

    public Block IsColliding(Vector2 position, float width, float height) 
    { 
     foreach (Block block in currentWorld.blocks) 
     { 
      if (Intersects(position, new Vector2(width, height), block.position, new Vector2(block.texture.Bounds.Width, block.texture.Bounds.Height))) return block; 
     } 
     return null; 
    } 

die ersten vector2 (Position) ist die Spielerposition die 2 Schwimmer sind die Breite und die Höhe der Spielertextur (player.texture.Bounds.Width/Height)