-2

これらの変数を使用して、パックマンとマンチーを衝突させるにはどうすればよいですか? 私はすでに動きがあり、それが送信した天井の下には、私が何をしなければならないかを説明するようなコードを与える必要があります.

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

あなたは定義したが定義munchieSizeしていないのでpacmanSize、アクターをドットと見なしていると思います。その場合、パックマンとマンチの座標が同じ座標系に相対的であると仮定すると、パックマンの位置のベクトルがマンチのバウンディング ボックスのいずれかに含まれているかどうか、各フレームまたはコリジョン テストの反復でチェックするだけで十分です。

私のコードは単なる参照であり、結果を得るには独自の型を使用する必要があると考えてください。

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

補足として、コードをクラスに構造化することを検討することをお勧めします。これにより、コードがより明確になり、操作しやすくなります。
これを行う方法がわからない場合は、次のチュートリアルを検討してください:クラスに関する MSDN チュートリアル
これにより、コード内でクラスを使用する際の核となる概念が示され、おそらくオブジェクト指向プログラミングについても紹介されます (OO プログラミングを初めて使用する場合)。

于 2012-12-18T21:23:30.893 に答える
0

素朴に;

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

おそらく、パックマンとマンチごとに描く「キャラクター」のサイズも追加したいと思うでしょう。

于 2012-12-18T19:57:59.077 に答える