IOS 物理引擎UIDynamic

2020-05-28  本文已影响0人  越天高

什么是UIDynamic

UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架
可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象
重力、弹性碰撞等现象

物理引擎的价值

广泛用于游戏开发,经典成功案例是“愤怒的小鸟”
让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果
提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏

知名的2D物理引擎

Box2d
Chipmunk

使用步骤

要想使用UIDynamic来实现物理仿真效果,大致的步骤如下
1.创建一个物理仿真器(顺便设置仿真范围)

2.创建相应的物理仿真行为(顺便添加物理仿真元素)

  1. 将物理仿真行为添加到物理仿真器中 -> 开始仿真

重力

 //1. 创建仿真器
    let  animator  = {
            return UIDynamicAnimator(referenceView: view)
        }()
//2.创建仿真行为
        let behavior = UIGravityBehavior(items: [box1])
        //设置重力的方向和速度
        behavior.gravityDirection = CGVector(dx: 2, dy: 15)
       //0表示右侧
        behavior.angle = 3.15 / 2
        behavior.magnitude = 5

        
        //将仿真行为添加到仿真器里面
        animator?.addBehavior(behavior)
        

碰撞

//1. 创建仿真器
    let  animator  = {
            return UIDynamicAnimator(referenceView: view)
        }()
       // 2.创建物理仿真行为
        let behavior = UICollisionBehavior(items: [box1, box2])
        //把参照试图的bounds当作边界
        behavior.translatesReferenceBoundsIntoBoundary = true
        
         // 碰撞模式
        //        Items  只碰撞元素
        //        Boundaries  自碰撞边界
        //        Everything: 啥玩意都碰撞
        behavior.collisionMode = UICollisionBehavior.Mode.everything
        
        //设置碰撞的那边界
        behavior.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0))
        let identifier : NSString = "bianjie"
        behavior.addBoundary(withIdentifier: identifier, from: CGPoint(x: 0, y: 300), to: CGPoint(x: 150, y: 300))
        
        //添加碰撞的代理 监听碰撞的状态
        behavior.collisionDelegate = self
        animator?.addBehavior(behavior)

//推

//1. 创建仿真器
   let  animator  = {
           return UIDynamicAnimator(referenceView: view)
       }()
//2.创建仿真行为
       let behavior = UIPushBehavior(items: [box2], mode: UIPushBehavior.Mode.instantaneous)
       
       //设置推的方向
       behavior.pushDirection = CGVector(dx: 0, dy: -6)
       
       //3 添加仿真行为
       animator?.addBehavior(behavior)
       
      

//捕获

//1. 创建仿真器
    let  animator  = {
            return UIDynamicAnimator(referenceView: view)
        }()

/创建仿真行为
        let behavior = UISnapBehavior(item: box1, snapTo: location);
        //越大捕获时的振幅越大
        behavior.damping = 5
        
        //添加行为
        animator?.addBehavior(behavior)
        

上一篇 下一篇

猜你喜欢

热点阅读