2012-12-18 63 views
-2

使用這些變量我將如何去與一個munchie碰撞pacman? 我已經有了運動,它發出的天花板必須被賦予更多的代碼才能解釋我將要做的事情。敵人碰撞檢測

Pacman variables 
private Point frameSize = new Point(32, 32); // Pacman image size 
private Point currentFrame = new Point(1, 0); // Start frame 
private Point sheetSize = new Point(2, 4);  // Spritesheet size 
private Vector2 pacmanPos;      // Pacman position in pixels 
private int pacmanSpeed = 8;     // Pacman movement speed in pixels 

// Game 
SpriteBatch spriteBatch; 
Texture2D munchie1, munchie2, pacman; 

// Sounds 
SoundEffect collisionSound; 

// Random number generator 
Random rand = new Random(); 

// Total number of munchies 
private int noOfMunchies = 5; 

Vector2[] munchiePos; 
private int munchieSize; 
private int[] munchieAnimationCount; 

private int timeSinceLastFrame = 0; 
private int milliSecondsPerFrame = 500; // 2 Frames Per Second (fps) 

回答

1

既然你已經定義了munchieSize而不是pacmanSize我想你正在考慮你的演員一個點。在這種情況下,假設pacman's和munchies的座標是相對於同一個系統的,只要pacman的位置矢量包含在任何munchies的邊界框中,就足以檢查每個幀或碰撞測試迭代。

你可以這樣做,考慮到我的代碼只是一個引用,你應該使用你自己的類型來實現結果。

var munchies = new PointF[5]; 
const int munchySize = 10; 
var pacmanPos = new PointF(); 
var collidesWith = munchies. 
    Where(m => new RectangleF(m, new SizeF(munchySize, munchySize)).Contains(pacmanPos)); 
var collisionHappened = collidesWith.Any(); 
+0

好的感謝抱歉互聯網去了謝謝你! –

0

天真地;

foreach mPos in munchiePos 
{ 
    if (pacmanPos == mPos) 
    { 
     // Collision 
    } 
} 

您可能還需要添加您爲每個pacman和munchie繪製的「字符」大小。

0

就在旁註中,您可能會考慮將您的代碼組織到類中,從而使它更清晰易用。
如果您不確定如何操作,請考慮以下教程:MSDN Tutorial on Classes
這會向您展示在代碼中使用類的核心概念,甚至可能會向您介紹面向對象編程(如果這是第一次使用OO編程)。