-2

使用这些变量,我将如何将 pacman 与 munchie 碰撞?我已经有了动作,而且它确实发送的天花板必须得到代码,更像是解释我必须做什么。

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)
4

3 回答 3

1

既然你已经定义了munchieSizepacmanSize我想你正在考虑你的演员一个点。在这种情况下,假设 pacman 和 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();
于 2012-12-18T20:01:07.983 回答
0

天真地;

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

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

于 2012-12-18T19:57:59.077 回答
0

顺便说一句,您可能需要考虑将代码结构化为类,这样可以更清晰、更容易使用。
如果您不确定如何执行此操作,请考虑以下教程:MSDN Tutorial on Classes
这向您展示了在代码中使用类的核心概念,甚至可能向您介绍面向对象的编程(如果这是第一次使用 OO 编程)。

于 2012-12-18T21:23:30.893 回答