请选择 进入手机版 | 继续访问电脑版
查看: 1926|回复: 7

silverlight 碰撞检测

[复制链接]
发表于 2012-2-5 14:07:20 | 显示全部楼层 |阅读模式
private bool CheckCollision(FrameworkElement control1, FrameworkElement controlElem1, FrameworkElement control2, FrameworkElement controlElem2)
        {
            // first see if sprite rectangles collide
            Rect rect1 = UserControlBounds(control1);
            Rect rect2 = UserControlBounds(control2);


            rect1.Intersect(rect2);
            if (rect1 == Rect.Empty)
            {
                // no collision - GET OUT!
                return false;
            }
            else
            {
                bool bCollision = false;
                Point ptCheck = new Point();

                // now we do a more accurate pixel hit test
                for (int x = Convert.ToInt32(rect1.X); x < Convert.ToInt32(rect1.X + rect1.Width); x++)
                {
                    for (int y = Convert.ToInt32(rect1.Y); y < Convert.ToInt32(rect1.Y + rect1.Height); y++)
                    {
                        ptCheck.X = x;
                        ptCheck.Y = y;

                        List<UIElement> hits = System.Windows.Media.VisualTreeHelper.FindElementsInHostCoordinates(ptCheck, control1) as List<UIElement>;
                        if (hits.Contains(controlElem1))
                        {
                            // we have a hit on the first control elem, now see if the second elem has a similar hit
                            List<UIElement> hits2 = System.Windows.Media.VisualTreeHelper.FindElementsInHostCoordinates(ptCheck, control2) as List<UIElement>;
                            if (hits2.Contains(controlElem2))
                            {
                                bCollision = true;
                                break;
                            }
                        }
                    }
                    if (bCollision) break;
                }
                return bCollision;
            }


        }




        public Rect UserControlBounds(FrameworkElement control)
        {
            Point ptTopLeft = new Point(Convert.ToDouble(control.GetValue(Canvas.LeftProperty)), Convert.ToDouble(control.GetValue(Canvas.TopProperty)));
            Point ptBottomRight = new Point(Convert.ToDouble(control.GetValue(Canvas.LeftProperty)) + control.Width, Convert.ToDouble(control.GetValue(Canvas.TopProperty)) + control.Height);

            return new Rect(ptTopLeft, ptBottomRight);
        }
判断control1中的controlElem1是否以碰到control2的controlElem2 demo:


该贴已经同步到 LEE的微博
回复

使用道具 举报

发表于 2018-8-2 23:00:41 | 显示全部楼层
嘿嘿,回个贴表明我来过。











契約範文   http://www.gfgfgf.com.tw/zyxx/yydq/   2018年08月02日 勵志
中醫睡眠    接發 http://www.gfgfgf.com.tw/zyts/zyqg/  外國寓言   中醫育兒       http://www.gfgfgf.com.tw/zyts/zhou/  祝福語
回复 支持 反对

使用道具 举报

发表于 2018-9-20 13:30:32 | 显示全部楼层
HOHO~~~~~~











個人自傳   http://www.gfgfgf.com.tw/zyxx/ycsc/   2018年09月20日 新聞排名
中醫針灸穴位大全    七言絕句 http://www.gfgfgf.com.tw/zyts/zyyy/  男士短髮         http://www.gfgfgf.com.tw/sg/  祝賀詞
回复 支持 反对

使用道具 举报

发表于 2018-9-27 11:01:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2018-10-4 07:44:58 | 显示全部楼层
不错不错,很好很好,谢谢分享











導遊詞   https://www.uni-hankyu.com.tw/   2018年10月04日 旅遊排行
中醫藥茶    失戀的句子 https://www.4way.tw/  OL髮型         https://www.h2oplus.com.tw/  搞笑圖片笑話
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 用百度帐号登录

本版积分规则

Archiver|手机版|小黑屋|BimCad Inc. ( 京ICP备15064117号

GMT+8, 2018-10-23 22:49 , Processed in 0.162405 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表