コード例 #1
0
 public bool IsColliding(PhysicalObject victim)
 {
     return hitbox.Intersects(victim.hitbox) && PixelCollision(victim);
 }
コード例 #2
0
        private bool PixelCollision(PhysicalObject victim)
        {
            IdleAnimation.Texture.GetData(0, idlePlayer.CurrentFrame, textureData, 0, textureData.Length);
            victim.IdleAnimation.Texture.GetData(0, victim.idlePlayer.CurrentFrame, victim.textureData, 0, victim.textureData.Length);

            int x1 = Math.Max(hitbox.X, victim.HitBox.X);
            int x2 = Math.Min(hitbox.X + hitbox.Width, victim.HitBox.X + victim.HitBox.Width);

            int y1 = Math.Max(hitbox.Y, victim.HitBox.Y);
            int y2 = Math.Min(hitbox.Y + hitbox.Height, victim.HitBox.Y + victim.HitBox.Height);

            for (int y = y1; y < y2; y++)
            {
                for (int x = x1; x < x2; x++)
                {
                    // Get the color of both pixels at this point
                    Color a = textureData[(x - hitbox.X) + (y - hitbox.Y) * Width];
                    Color b = victim.textureData[(x - victim.hitbox.X) + (y - victim.hitbox.Y) * victim.Width];

                    // If both pixels are not completely transparent,
                    if (a.A > 127 && b.A > 127)
                        return true;

                }
            }
            return false;
        }