コード例 #1
0
        private bool isPixelsCollided(IPixelsCollidable i_Source)
        {
            bool isPixelsCollided = false;

            int top    = Math.Max(Bounds.Top, i_Source.Bounds.Top);
            int bottom = Math.Min(Bounds.Bottom, i_Source.Bounds.Bottom);
            int left   = Math.Max(Bounds.Left, i_Source.Bounds.Left);
            int right  = Math.Min(Bounds.Right, i_Source.Bounds.Right);

            this.m_LastCollisionRectangle = new Rectangle(left, top, right - left, bottom - top);
            (i_Source as CollidableSprite).m_LastCollisionRectangle = new Rectangle(top, left, right - left, top - bottom);

            for (int y = top; y < bottom; y++)
            {
                for (int x = left; x < right; x++)
                {
                    Color pixelA = this.Pixels[(x - this.Bounds.Left) + ((y - this.Bounds.Top) * this.Bounds.Width)];
                    Color pixelB = i_Source.Pixels[(x - i_Source.Bounds.Left) + ((y - i_Source.Bounds.Top) * i_Source.Bounds.Width)];

                    if (pixelA.A != 0 && pixelB.A != 0)
                    {
                        ///keep colliding pixels data
                        this.m_CollidedPixelsPositions.Add(new Vector2(x, y));
                        (i_Source as CollidableSprite).LastCollisionPixelsPositions.Add(new Vector2(x, y));
                        this.m_CollidedPixelsIndex.Add(new Vector2(x - this.Bounds.Left, y - this.Bounds.Top));
                        (i_Source as CollidableSprite).LastCollisionPixelsIndex.Add(new Vector2(x - i_Source.Bounds.Left, y - i_Source.Bounds.Top));

                        isPixelsCollided = true;
                    }
                }
            }

            return(isPixelsCollided);
        }
コード例 #2
0
        private bool checkPixelsCollision(ICollidable i_Source)
        {
            bool pixelsCollided      = false;
            bool rectanglesCollided  = false;
            IPixelsCollidable source = i_Source as IPixelsCollidable;

            if (source != null)
            {
                rectanglesCollided = source.Bounds.Intersects(this.Bounds);
            }

            if (rectanglesCollided)
            {
                pixelsCollided = this.isPixelsCollided(i_Source as IPixelsCollidable);
            }

            return(pixelsCollided);
        }
コード例 #3
0
        private bool checkRectangleCollision(ICollidable i_Source)
        {
            {
                bool collided            = false;
                IPixelsCollidable source = i_Source as IPixelsCollidable;
                if (source != null)
                {
                    collided = source.Bounds.Intersects(this.Bounds);
                }

                if (collided)
                {
                    collided = true;
                }

                return(collided);
            }
        }