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
  • 相关阅读:
    【转载】通用 application 彻底退出应用 获崩溃异常,保存错误日志,并重启应用
    【转载】 Android App 内存泄露之Thread
    【转载】ViewHolder的简洁写法
    Android知识整理(5) apk反编译与代码混淆
    CAS单点登录客户端配置
    一位知乎网友的人生感悟
    Android知识整理(4) 关于Android应用的退出
    Android知识整理(3) 两种自定义样式的Checkbox
    Android知识整理(2)【转】android中三种onClick事件的实现方式与对比
    Android知识整理(1) Pull解析器解析XML
  • 原文地址:https://www.cnblogs.com/_Chill/p/1555334.html
Copyright © 2011-2022 走看看