Spritekit之SKPhysicsWorld

完成游戏的物理系统设置,需要完成以下几点: 
1、设置你想赋予节点的physicsbody的各属性
2、设置整个游戏世界的物理系统,即scene的物理属性 
3、场景scene签订contactDelegate代理,实现didBegin代理方法,处理碰撞逻辑
self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)  /// 物理世界的重力
self.physicsWorld.contactDelegate = self               /// 碰撞代理
 
SKPhysicsBody
常用属性:
friction :CGFloat摩擦力,就是物体表面的粗糙程度,在其上面运动的物体会受到其friction的影响 0.0~1.0, 默认0.2
restitution :CGFloat 弹性系数,在碰撞的时候决定碰撞效果的强弱 0.0~1.0, 默认0.2
isDynamic : Bool,node是否能被物理模拟移动
affectedByGravity : Bool,node是否受重力影响 
allowsRotation : Bool,node是否能旋转
categoryBitMask: UInt32 它标记了物体属于那一类物体
collisionBitMask: UInt32 它标记了哪些物体可以跟其发生碰撞
contactTestBitMask: UInt32 它标记了哪些物体会和其发生碰撞后产生一些影响
 
常用方法:

open func applyForce(_ force: CGVector) //给对象施加力

open func applyForce(_ force: CGVector, at point: CGPoint) //给对象施加持续力,根据牛顿第二定律产生加速度,并在指定的点上产生效果,如果point不为.zero,那么物体由于受力的作用会发生旋转

open func applyTorque(_ torque: CGFloat) //向物理体应用一个扭矩(torque),这个扭矩会导致物理体围绕其质心旋转,正值为顺时针

open func applyImpulse(_ impulse: CGVector)

open func applyImpulse(_ impulse: CGVector, at point: CGPoint) //向物理体应用一个冲量(impulse),这个冲量在指定的点上产生效果,并导致物理体获得一个瞬间的速度变化。冲量的效果取决于物理体的质量、惯性以及冲量的大小和方向.它不会导致物理体持续受到力的作用,而是给予物理体一个瞬间的速度变化

open func allContactedBodies() -> [SKPhysicsBody] //返回一个与当前对象接触的所有SKPhysicsBodies数组

 

使用物理特性时遇到的问题:

在.sks文件中设置node节点的physics时,如果未在控制器中将view.ignoresSiblingOrder = false, 加载节点可能会呈现物理属性设置无效的bug

更多内容待继续补充...

 

 

 

 

posted on   E-ran  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示