zoukankan      html  css  js  c++  java
  • iOS Sprite Kit最新特性Physics Field虚拟物理场Swift測试

    在WWDC2014上,Sprite Kit又有了非常多新的提升!

    当中一个非常有意思的东西就是Physics Field!也就是物理场!

    这意味着我们在Sprite kit上编写虚拟物理场的游戏将变得非常easy!

    这里我依据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

    // 场强,默认是1

    var strength: CFloat 

    // 场的衰减指数,用来计算某个距离的作用力大小,从最小半径開始计算。默认是0

    var falloff: CFloat

    // 场的最小影响半径,默认是一个非常小的数

    var minimumRadius: CFloat

    // 假设enabled,则场起作用默认是true(在Swift下貌似不太好使,预计beta问题

    var enabled: Bool

    // 场的排他性,假设是true,则其它场无法作用在本场region范围。假设有两个场的影响范围重合,则无法推断哪个场作用

    var exclusive: Bool    

    // 场的作用物体类别,默认是all

    @see SKPhysicsBody.fieldBitMask

    @see SKEmitterNode.fieldBitMask

    var categoryBitMask: UInt32


    3.场的创建

    举例创建弹簧场:

    let springField = SKFieldNode.springField()

    springField.strength = 0.05

    springField.falloff = -5

    springField.position = fieldCenter

    springField.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】




  • 相关阅读:
    #pragram与#ifndefine防止头文件重复编译的区别
    C++中几种测试程序运行时间的方法
    Android 6.0以上版本权限管理
    dip dp dpi ppi density区别
    github中Android程序导入AS
    《实时控制软件设计》第三组结项总结
    《实时控制软件设计》第三组第八天工作日志
    《实时控制软件设计》第三组第七天工作日志
    《实时控制软件设计》第三组第六天工作日志
    《实时控制软件设计》第三组第五天工作日志
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3804859.html
Copyright © 2011-2022 走看看