美文网首页
物理仿真

物理仿真

作者: T92 | 来源:发表于2016-10-28 11:21 被阅读17次

    物理仿真就比较有意思了,之前很火的愤怒的小鸟就是全部用物理仿真完成的,使用物理仿真可以实现弹跳,重力,吸附等效果

    import UIKit
    
    class ViewController: UIViewController {
        
        
        //仿真者(现实动画)
        var dynamic: UIDynamicAnimator!
        //现实行为
        var dynamicitem: UIDynamicItemBehavior!
        //重力行为
        var gravi: UIGravityBehavior!
        //碰撞行为
        var colli: UICollisionBehavior!
        //吸附行为
        var sna: UISnapBehavior!
        //吸附行为item
        var maiImageView: UIImageView!
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //dynamic1()
            dynamic2()
        }
        
        //点击屏幕一次,创建一个imageView让其遵循现实,重力,碰撞行为
        func dynamic1(){
            //创建仿真者
            dynamic = UIDynamicAnimator(referenceView: self.view)
            //创建现实行为
            dynamicitem = UIDynamicItemBehavior(items: [])
            //设置弹力值,数值越大弹力越大
            dynamicitem.elasticity = 0.6
            //重力行为
            gravi = UIGravityBehavior(items: [])
            //碰撞行为
            colli = UICollisionBehavior(items: [])
            //开启刚体碰撞
            colli.translatesReferenceBoundsIntoBoundary = true
            //碰撞模式
            //colli.collisionMode = UICollisionBehaviorMode.Everything
            //将行为添加到仿真者中
            dynamic.addBehavior(dynamicitem)
            dynamic.addBehavior(gravi)
            dynamic.addBehavior(colli)
        }
        
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            
            /* 函数1使用
            //横坐标
            let x = CGFloat(arc4random() % 300)
            let size = CGFloat(arc4random() % 50 + 5)
            
            //图片
            let imageArray = ["1","bird1","bluebird1","ice1","pig1","pig_44"]
            
            //创建ImageView
            let imageView = UIImageView(frame: CGRectMake(x,50,size,size))
            let index = Int(arc4random() % UInt32(imageArray.count))
            imageView.image = UIImage(named: imageArray[index])
            self.view.addSubview(imageView)
            
            //让imageView遵循各种行为
            dynamicitem.addItem(imageView)
            gravi.addItem(imageView)
            colli.addItem(imageView)
            
            */
            
            //函数2使用
            
            //先移除仿真者上的所有行为
            dynamic.removeAllBehaviors()
            
            //获取手指点击位置
            let touch = (touches as NSSet).anyObject()
            let point = touch?.locationInView(self.view)
            
            //初始化吸附行为
            //参数1:需要吸附行为作用的对象
            //参数2:需要移动到的位置
            sna = UISnapBehavior(item: maiImageView, snapToPoint: point!)
            
            //设置弹跳幅度
            sna.damping = 0.8
            
            //将吸附行为添加到仿真者中
            dynamic.addBehavior(sna)
            
        }
        
        func dynamic2(){
            maiImageView = UIImageView(frame: CGRectMake(0,0,100,100))
            maiImageView.image = UIImage(named: "1")
            self.view.addSubview(maiImageView)
            
            //初始化仿真者
            dynamic = UIDynamicAnimator(referenceView: self.view)
        }
    }
    

    相关文章

      网友评论

          本文标题:物理仿真

          本文链接:https://www.haomeiwen.com/subject/rjxeuttx.html