zoukankan      html  css  js  c++  java
  • silverlight 碰撞检测

    原内容
    http://www.andybeaulieu.com/Default.aspx?tabid=67&EntryID=95
    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:
    获取 Microsoft Silverlight
  • 相关阅读:
    跟王千问学数学之什么是比
    王千问之学习的金字塔
    跟王千问学数学之平方差公式
    跟王千问学数学之三角形
    跟王千问学数学之小数加法、最小公倍数
    跟王千问学数学之小数
    一年级孩子的特点以及如何辅导他们学习
    python中的property属性
    python中的浅拷贝和深拷贝
    http协议、web服务器、并发服务器(下)
  • 原文地址:https://www.cnblogs.com/_Chill/p/1555334.html
Copyright © 2011-2022 走看看