swift 初探ARKit

参考

https://www.jianshu.com/p/348678918783

隐私权限

https://www.cnblogs.com/shisishao/p/5872178.html

import UIKit
import ARKit

struct Masks: OptionSet {
    let rawValue: Int
    static let ship = Masks(rawValue: 1 << 0)
    static let bullet = Masks(rawValue: 1 << 1)
}

class ViewController: UIViewController, ARSCNViewDelegate {

    var sceneView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let showHeight : CGFloat = UIScreen.main.bounds.size.height - 100
        sceneView = ARSCNView.init(frame: CGRect.init(x: 0, y: 50, width: UIScreen.main.bounds.size.width, height:showHeight))

        // 整个场景的大小
        self.view.addSubview(sceneView)
        sceneView.automaticallyUpdatesLighting = true
        // 启动完成后添加飞船
        self.addShip()
    }

    func addShip() {
        let ship = Ship()
        let x : Double = 0
        let y : Double = 0.3
        let z : Double = -0.5
        ship.position = SCNVector3(x,y,z)
        self.sceneView.scene.rootNode.addChildNode(ship)

        //球形
        let bullet = Bullet()
        let x1 : Double = 0.1
        let y1 : Double = 0
        let z1 : Double = -0.2
        bullet.position = SCNVector3(x1,y1,z1)
        self.sceneView.scene.rootNode.addChildNode(bullet)
        // 有.scn 类型的资源就更方便了。
        // Create a new scene
        //        let scene = SCNScene(named: "art.scnassets/ship.scn")!

    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARWorldTrackingConfiguration()
        // Run the view‘s session
        sceneView.session.run(configuration)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Pause the view‘s session
        sceneView.session.pause()
    }
}

// 飞船类
class Ship: SCNNode {

    override init() {
        super.init()

        //正方体
        let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
        self.geometry = box

        let shape = SCNPhysicsShape(geometry: box)
        self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape)
        self.physicsBody?.isAffectedByGravity = false
        self.physicsBody?.categoryBitMask = Masks.ship.rawValue
        self.physicsBody?.contactTestBitMask = Masks.bullet.rawValue

        let material = SCNMaterial()
        material.diffuse.contents = UIImage.init(named: "battle")

        self.geometry?.materials = [material,material,material,material,material,material]
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

// 子弹类:
class Bullet: SCNNode {

    override init() {
        super.init()
        // 形状:球体
        let sphere = SCNSphere(radius: 0.025)
        self.geometry = sphere
        // 物理实体
        let shape = SCNPhysicsShape(geometry: sphere)
        self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape)

        self.physicsBody?.isAffectedByGravity = false // 不受引力影响
        self.physicsBody?.categoryBitMask = Masks.bullet.rawValue // 自身是识别码
        self.physicsBody?.contactTestBitMask = Masks.ship.rawValue // 碰撞的掩码

        // 添加节点的图片
        let material = SCNMaterial()
        material.diffuse.contents = UIImage.init(named: "sanlian")
        self.geometry?.materials = [material]

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

原文地址:https://www.cnblogs.com/qingzZ/p/11718918.html

时间: 2024-08-13 16:43:18

swift 初探ARKit的相关文章

apple swift 初探

今天凌晨,苹果举办了wwdc14,自然又成了各大网站的头条.尽管使用作为mac os的用户已经有接近10年时间,但是对苹果的开发平台却一直没什么了解,一方面是因为并不认可苹果的用户哲学,另一方面由于长期从事c++开发,对objective-c的语法也什么好感,甚至觉得怪异(个人感觉). 下午浏览新闻的时候,却发现wwdc14没有发布硬件产品,却有一门新的开发语言swift发布,按照苹果的说法是"innovative new programming language",不禁对这门语言产生

swift初探(供objective c开发者参考)

6月初的wwdc苹果推出了一门新的开发语言swift.系统10.9.3以上安装xcode6 beta版即可体验swift. 苹果公司做了尽可能多的努力让这门语言迅速成为一个工业级的实用编程语言,而不是华而不实的花瓶. 通过xcode6查看文档,可以发现之前现存的接口都多了swift适配,举例如下(以下都从苹果官方文档中摘录): 简单方法适配: swift: func UIImageJPEGRepresentation(_ image: UIImage!, _ compressionQuality

现代的新语言--Swift初探

新的语言 WWDC简短的介绍,新的语言Swift就问世了,虽然新语言的名字导致贴吧下歌手粉丝和开发者们争抢地盘- -,不过雨燕就是这么来了. WWDC keynote里给Swift打上了很多标签: Closures,Generics,Namespaces,Type inference,Multiple return types 闭包,泛型支持,支持命名空间,去除隐式类型转换,多返回值等这些优秀的特性让这门语言显得现代和便捷,再加上学习了很多其他语言类似Go,JavaScript等等的优秀语法,它

Swift初探一

今天安装了一下Xcode6-Beta版,想来体验一下Swift的魅力:安装Swift系统最低版本号为:10.9.3 仅仅看看一点The Swift Programming Language,以下给大家分享一下:(待续...) // Playground - noun: a place where people can play import Cocoa ///1.声明一个可变的变量 var str = "Hello, playground" ///2.声明常量 let implicit

初探swift语言的学习笔记十一(performSelector)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在OC中使用好好的performSelector,但不知为什么在swift有意的被拿掉了.更有甚者连IMP, objc_msgSend也不能用了.虽然想不通为什么,但应该有他的道理.就不纠结了. 大家可能在OC中使用得更多的就是延时处理,及后台处

初探swift语言的学习笔记十(block)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在前面一些学习中,原本把闭包给理解成了block尽管有很多相似之处,但block还是有他自己的独特之外.近日,在写oc/swift混合编码时,有时候需要swift回调oc,oc回调swift . 因此我把swift中的 block 常见的声明和写

Swift之旅:2.完成计算器,初探MVC设计模式

斯坦福大学公开课:iOS8 网易空开课地址链接:斯坦福大学公开课:IOS8开发 github上字幕链接:字幕 百度网盘资源下载链接:百度网盘 1.计算器完成 ①回车键及相关的代码 //定义一个数组,用来当做栈保存数据使用 var openStack = Array<Double>(); //enter用来执行进栈操作 @IBAction func enter() { //设置重新开始输入字符串 userIsInTheMiddleOfTypingANumber = false //将value进

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

初探swift语言的学习笔记四-2(对上一节有些遗留进行处理)

在上一节中有些问题还没有弄清,在这里自己写了一下,做了一下验证,并希望能给读者有所帮助. 看例子: 例子中包括 callback函数的声明与使用 函数作为形参进行传递 函数作为返回值 函数支持泛型,当然class也支持. import Foundation typealias Point = (Int, Int) let origin: Point = (0, 0) //初始化函数用 func willDoit(sender : CallBackManager) { println("willD