敌人碰撞检测

时间:2012-12-18 19:50:37

标签: c# collision

使用这些变量我如何与一个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)

3 个答案:

答案 0 :(得分:1)

既然你定义了munchieSize而不是pacmanSize我认为你在考虑你的演员是一个点。在这种情况下,假设pacman和munchies的坐标相对于同一系统,如果pacman的位置的向量包含在任何一个零食的边界框中,那么检查每个框架或碰撞测试迭代就足够了。

你可以这样做,考虑我的代码只是一个参考,你应该使用自己的类型来实现结果。

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();

答案 1 :(得分:0)

天真;

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

您可能还想添加为每个pacman和munchie绘制的“角色”大小。

答案 2 :(得分:0)

在旁注中,您可能需要考虑将代码构建到类中,这样可以更清晰,更轻松地使用。
如果您不确定如何执行此操作,请考虑以下教程:MSDN Tutorial on Classes 这向您展示了在代码中使用类的核心概念,甚至可能会向您介绍面向对象的编程(如果这是第一次使用OO编程)。