iOS Sprite Kit最新特性Physics Field虚拟物理场Swift测试
2014-06-14 23:08
579 查看
在WWDC2014上,Sprite Kit又有了很多新的提升!
其中一个很有意思的东西就是Physics Field!也就是物理场!
这意味着我们在Sprite kit上编写虚拟物理场的游戏将变得非常简单!
这里我根据WWDC2014上What's new in Sprite kit的官方视频上的DEMO,
用Swift语言自己做了一个Demo。
截图如下:
先放上GitHub链接: https://github.com/songrotek/PhysicsFieldsWorld.git
我另外录制了效果视频大家可以先一睹为快: http://v.youku.com/v_show/id_XNzI2MzUzNzYw.html
下面介绍一下Physics Field!
1. 总体情况
Sprite Kit的物理场Physics Field一共有十个:
enum FieldType{ case LinearGravityField // 线性重力场 case RadialGravityField // 放射重力场 case DragField // 阻力场 case VortexField // 涡流场 case VelocityField // 速度场 case NoiseField // 噪声场 case TurbulenceField //紊乱场 case SpringField // 弹簧场 case ElectricField // 电子场 case MagneticField // 磁场}
2.场的通用参数
那么所有类型的场都在SKFieldNode这个类中进行创建和设置!
无论是什么类型的场,都有一些通用的参数设置。如下
// 场的影响区域,超出区域的物体不受场影响,默认是无限
var region: SKRegion! // 场强,默认是1var strength: CFloat // 场的衰减指数,用来计算某个距离的作用力大小,从最小半径开始计算。默认是0var falloff: CFloat// 场的最小影响半径,默认是一个非常小的数var minimumRadius: CFloat// 如果enabled,则场起作用默认是true(在Swift下貌似不太好使,估计beta问题var enabled: Bool// 场的排他性,如果是true,则其他场无法作用在本场region范围。如果有两个场的影响范围重合,则无法判断哪个场作用var exclusive: Bool // 场的作用物体类别,默认是all@see SKPhysicsBody.fieldBitMask@see SKEmitterNode.fieldBitMaskvar categoryBitMask: UInt32
3.场的创建举例创建弹簧场:let springField = SKFieldNode.springField()springField.strength = 0.05springField.falloff = -5springField.position = fieldCenterspringField.name = "SpringField"addChild(springField)
其他场一样的方式,就是参数的设置根据具体需要不一样
4.每种场!4.1 线性场Linear Gravity Field就是符合牛顿第二定律 F=ma用它可以制造各种方向的重力,当然用physics world的gravity也可以设置,但这个场可以设置范围。
4.2 放射重力场 Radial Gravity Field要模拟一下月球绕着地球转就得用这个,重力场在一个点上。
4.3 阻力场 Drag Field在这个场就像一个物体运动遇到摩擦要减速,摩擦力取决于物体的速度
4.4 涡流场 Vortex Field这个场可以用来***龙卷风的效果,场的力绕着中心转,如果strength为正就是逆时针,如果为负就是顺时针
4.5 噪声场 Noise Field 和 紊乱场 Turbulence Field
噪声场就是每个位置受力情况随机,有个smoothness参数来调整噪声力的平滑程度
紊乱场合噪声场很接近,但对物体的影响较小
4.6 弹簧场 Spring Field
可以使物体像连接到了场中心的弹簧,会在场中心来回移动
4.7 速度场
需要添加一个SKTexture纹理,由纹理确定每个场位置点的力方向。
可以实现的效果就是比如弄了一条河的速度场,那么一个物体放在河中就能沿着河流移动
4.8 电场Electric Field 和 磁场 Magnetic Field
就是洛伦茨力F=q(E * VB) ,其中qE是电场力,qVB是磁场力
为了实现电场和磁场的模拟,Sprite Kit的PhysicsBody中添加了Charge也就是带电量。
但目前就我个人实验,在Swift下并没能实现电磁场的模拟,等待Apple的完善吧
5 小结
Physics Field是个很酷的特性,值得掌握使用,非常方便!
【注:本文为原创文章,如需转载,请注明出处,来自songrotek的blog】
其中一个很有意思的东西就是Physics Field!也就是物理场!
这意味着我们在Sprite kit上编写虚拟物理场的游戏将变得非常简单!
这里我根据WWDC2014上What's new in Sprite kit的官方视频上的DEMO,
用Swift语言自己做了一个Demo。
截图如下:
先放上GitHub链接: https://github.com/songrotek/PhysicsFieldsWorld.git
我另外录制了效果视频大家可以先一睹为快: http://v.youku.com/v_show/id_XNzI2MzUzNzYw.html
下面介绍一下Physics Field!
1. 总体情况
Sprite Kit的物理场Physics Field一共有十个:
enum FieldType{ case LinearGravityField // 线性重力场 case RadialGravityField // 放射重力场 case DragField // 阻力场 case VortexField // 涡流场 case VelocityField // 速度场 case NoiseField // 噪声场 case TurbulenceField //紊乱场 case SpringField // 弹簧场 case ElectricField // 电子场 case MagneticField // 磁场}
2.场的通用参数
那么所有类型的场都在SKFieldNode这个类中进行创建和设置!
无论是什么类型的场,都有一些通用的参数设置。如下
// 场的影响区域,超出区域的物体不受场影响,默认是无限
var region: SKRegion! // 场强,默认是1var strength: CFloat // 场的衰减指数,用来计算某个距离的作用力大小,从最小半径开始计算。默认是0var falloff: CFloat// 场的最小影响半径,默认是一个非常小的数var minimumRadius: CFloat// 如果enabled,则场起作用默认是true(在Swift下貌似不太好使,估计beta问题var enabled: Bool// 场的排他性,如果是true,则其他场无法作用在本场region范围。如果有两个场的影响范围重合,则无法判断哪个场作用var exclusive: Bool // 场的作用物体类别,默认是all@see SKPhysicsBody.fieldBitMask@see SKEmitterNode.fieldBitMaskvar categoryBitMask: UInt32
3.场的创建举例创建弹簧场:let springField = SKFieldNode.springField()springField.strength = 0.05springField.falloff = -5springField.position = fieldCenterspringField.name = "SpringField"addChild(springField)
其他场一样的方式,就是参数的设置根据具体需要不一样
4.每种场!4.1 线性场Linear Gravity Field就是符合牛顿第二定律 F=ma用它可以制造各种方向的重力,当然用physics world的gravity也可以设置,但这个场可以设置范围。
4.2 放射重力场 Radial Gravity Field要模拟一下月球绕着地球转就得用这个,重力场在一个点上。
4.3 阻力场 Drag Field在这个场就像一个物体运动遇到摩擦要减速,摩擦力取决于物体的速度
4.4 涡流场 Vortex Field这个场可以用来***龙卷风的效果,场的力绕着中心转,如果strength为正就是逆时针,如果为负就是顺时针
4.5 噪声场 Noise Field 和 紊乱场 Turbulence Field
噪声场就是每个位置受力情况随机,有个smoothness参数来调整噪声力的平滑程度
紊乱场合噪声场很接近,但对物体的影响较小
4.6 弹簧场 Spring Field
可以使物体像连接到了场中心的弹簧,会在场中心来回移动
4.7 速度场
需要添加一个SKTexture纹理,由纹理确定每个场位置点的力方向。
可以实现的效果就是比如弄了一条河的速度场,那么一个物体放在河中就能沿着河流移动
4.8 电场Electric Field 和 磁场 Magnetic Field
就是洛伦茨力F=q(E * VB) ,其中qE是电场力,qVB是磁场力
为了实现电场和磁场的模拟,Sprite Kit的PhysicsBody中添加了Charge也就是带电量。
但目前就我个人实验,在Swift下并没能实现电磁场的模拟,等待Apple的完善吧
5 小结
Physics Field是个很酷的特性,值得掌握使用,非常方便!
【注:本文为原创文章,如需转载,请注明出处,来自songrotek的blog】
相关文章推荐
- iOS Sprite Kit最新特性Physics Field虚拟物理场Swift测试
- iOS Sprite Kit最新特性Physics Field虚拟物理场Swift測试
- WWDC 2013 Session笔记 - SpriteKit快速入门和新时代iOS游戏开发指南
- iOS杂谈19—iOS7 API重点API介绍:iBeacons、Sprite Kit、Game Center以及AirDrop等
- 用Swift和SpriteKit开发iOS游戏
- 用Swift和SpriteKit开发iOS游戏
- ios游戏开发 Sprite Kit教程:初学者 3
- iOS杂谈19—iOS7 API重点API介绍:iBeacons、Sprite Kit、Game Center以及AirDrop等
- iOS游戏框架Sprite Kit基础教程——Swift版上册
- 苹果 iOS 8 新固件新功能特性总结汇总 (苹果 iPhone/iPad 最新移动操作系统)
- ios游戏开发 Sprite Kit教程(一)
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
- ios游戏开发 Sprite Kit教程:初学者 1
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比(一家之言)
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
- ios游戏开发 Sprite Kit教程:初学者 2
- iOS 7 Sprite Kit游戏——探险
- SpriteKit在iOS8和OSX10.10中的新特性(强悍来袭)
- ios游戏开发 Sprite Kit教程(二)