首页 > 代码库 > SpriteKit 初探

SpriteKit 初探

1. SpriteKit概述

SpriteKit是苹果提供的一个原生2D游戏框架,它支持纹理精灵、粒子特效、物理引擎等游戏开发元素。


SpriteKit优缺点:

技术分享





SpriteKit的坐标系:

技术分享

2. SpriteKit框架中常用类介绍

1.)SKView

? SKView是用于展现SKScene节点的视图

? 可以使用presentScene:和presentScene:transition:方法展现场景

? 注意:不允许编写SKView的子类

 

2.) SKScene

 

? 场景是内容的根节点,用于在一个SKView上显示SpriteKit内容

? 场景是无限大的,其中的内容,通过视口(viewport)呈现给用户

? 实例化场景时,size参数用于定义展现场景视口(viewport)的大小

? 要显示场景的其他位置的内容,将视口移动到相应位置即可,可以创建一个SKNode负责视口的变化

 

3.)SKNode

 

? SKNode是SpriteKit场景图形节点。这些分支节点与几何叶节点一起构成SpriteKit场景图树的有向无环图(DAG)

? 除根节点外,所有的节点都具有唯一的父节点,叶节点没有子节点,同时包含一些满足DAG条件的可共享数据

? 所谓有向无环图是指:任意一条边有方向,且不存在环路的图

? 基本属性:

?       frame/position:边框/位置

?       zPosition/zRotation:Z轴方向位置/旋转角度

?       xScale/yScale:X/Y轴方向缩放比例

?       speed:速度

?       alpha:透明度

?       paused:控制动画暂停

?       hidden:控制是否隐藏

?       userInteractionEnabled:是否允许用户交互

?       parent:父节点

?       children:子节点数组

?       name:名称(在一个场景树中应该保持唯一)

?       scene:当前所在场景

?       physicsBody:物理刚体,节点的物理属性描述,例如:形状、密度等

?       userData:针对当前节点的用户数据字典,默认为nil

 

? 子类

?       SKSpriteNode:精灵节点,是一个2D纹理节点,在指定矩形区域内快速显示图像

?       KLabelNode:使用指定的字体显示文本标签

?       SKShapeNode:使用指定的路径绘制或填充形状

?       SKVideoNode:视频节点,提供视频播放支持

?       SKEmitterNode:粒子发射器节点,提供粒子效果支持

?       SKCropNode:裁剪组件,使用遮罩裁剪其内部的子节点

?       SKEffectNode:使用帧缓冲效果渲染节点结果,用于生成某一时刻的屏幕快照

4.)SKAction

?  SKAction是一个动作,通过SKScene场景中的节点执行(runAction),将动作绑定到节点,可以改变节点的结构和内容,也可以改变场景

?  常用的Action

?       removeFromParent:将一个node从其父节点上移除,当不再需要使用某个节点时,使用方法可以从scene上移除

?       sequence(系列):按顺序依次执行多个action

?       group(组):同时并发执行多个action

?       repeatAction(重复):按指定次数重复action、sequence、group

?       repeatActionForever(重复):无限循环action、sequence、group

3. SpriteKit的渲染过程

技术分享

4. SpriteKit的物理引擎

?       物理世界(physics world)是用来进行物理仿真的空间,默认被创建在scene之上

?       在Sprite Kit中,可以为每个sprite设置一个物理刚体(physicsbody)以实现碰撞检测。物理刚体可以不必与sprite自身的形状(即显示图像)一致,通常物理刚体并不需要精确到每个点,而这已经足以适用于大多数游戏了

?       设置参与碰撞检测物体的类别掩码(categoryBitMask),用于区分不同的物理对象。当检测到两种sprite的物理刚体发生碰撞时,通过category可以区分出精灵的类型,并根据类别做出不同的处理

?       设置代理,检测物体碰撞。当检测到碰撞时,根据碰撞对象的类别,做后续处理,例如播放声音或者动画,代理类为SKPhysicsContactDelegate。

 

5. 额外的奖励:

5.1 如何利用Xcode产生一个纹理集合 ?

基本步骤:

1. 把图片素材放在一个文件夹中

2. 把该文件夹取名为name.atlas

3. 选中文件 -> 把文件加入到项目中

4. 在编辑区域,选中你的项目并点击Build Settings
技术分享

5. 在搜索区域输入Sprite,并按下return

6. 设置“Enable TextureAtlas Generation” 为YES

技术分享

5.2 如何使用纹理动画 ?

//1. 实例化纹理集
        SKTextureAtlas *altas = [SKTextureAtlas atlasNamed:@"image"];
        _textureArray = [NSMutableArray array];
        for (int i=1; i<=5; i++) {
            SKTexture *texture = nil;
                //2.加载所有纹理集中的纹理到数组
                texture = [altas textureNamed:[NSString stringWithFormat:@"%d.png", i]];
            [_textureArray addObject:texture];
        }
        //3.实例化纹理精灵
        SKSpriteNode *text = [SKSpriteNode spriteNodeWithTexture:_textureArray[0]];
        text.position = CGPointMake(100, 100);
        [self addChild:text];
        _text = text;
    
        //4. 动画化纹理精灵
        SKAction *action  = [SKAction animateWithTextures:_textureArray timePerFrame:0.2f];
        [_text runAction:[SKAction repeatActionForever:action]];


**********************************************************************************************************************************************************
 忍者飞镖源码:  http://download.csdn.net/detail/luozhonglan/8313541
打鼹鼠源码:      http://download.csdn.net/detail/luozhonglan/8313529

 下一篇大柚将介绍SceneKit,她是苹果提供的用于制作3D游戏的框架



SpriteKit 初探