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游戏的框架

时间: 2024-10-07 06:28:52

SpriteKit 初探的相关文章

进阶之初探nodeJS

一.前言 在"初探nodeJS"随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器. 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门node,固萌生一个想法--想在该篇随笔中,通过一步步编写一个稍大一点的node示例,让我们在整体上更加全面地了解node. so,该篇随笔是建立在"初探nodeJS"之上的,固取名为"进阶之初探nodeJS". 好了,侃了这多,那么我们即将实现一个

从273二手车的M站点初探js模块化编程

前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数据. 273这个M站点是产品推荐我看的.第一眼看这个产品时我就再想他们这个三次加载和翻页按钮的方式,那么小分页的pageIndex是怎么计算的.所以就顺便看了下源码. 提到看源码时用到了Chrome浏览器的格式化工具(还是朋友推荐我的,不过这个格式化按钮的确不明显,不会的话自行百度). 三次加载和分

[转载]HDFS初探之旅

转载自 http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html , 感谢虾皮工作室这一系列精彩的文章. Hadoop集群(第8期)_HDFS初探之旅 1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.它所具有的高容错.高可靠性.高可扩展性.高

MongoDB初探系列之二:认识MongoDB提供的一些常用工具

在初探一中,我们已经可以顺利的将MongoDB在我们自己的机器上跑起来了.但是在其bin目录下面还有一些我们不熟知的工具.接下来,将介绍一下各个小工具的用途以及初探一中MongoDB在data文件夹下创建的文件的用途. 1.bin目录下面的各种小工具简介及使用方式 bsondump.exe 用于将导出的BSON文件格式转换为JSON格式mongo.exe mongoDB的客户端 mongod.exe 用于启动mongoDB的Server mongodump.exe 用于从mongodb数据库中导

Asynchronous Pluggable Protocols 初探

Asynchronous Pluggable Protocols,异步可插入协议,允许开发者创建可插协议处理器,MIME过滤器,以及命名空间处理器工作在微软IE4.0浏览器以及更高版本或者URL moniker中.这涉及到Urlmon.dll动态链接库所公开(输出)的可插协议诸多功能,本文不进行深入的原理讲解,只对它其中之一的应用进行解析,那就是如何将一个应用程序注册为URL协议. 应用场景: tencent协议: 当我们打开"tencent://message/?uin=要链接的QQ号 &qu

重新认识HTML,CSS,Javascript 之node-webkit 初探

今天我们来系统的.全面的 了解一下前端的一些技术,将有助于我们写出 更优秀的 产品 出来. 什么是HTML? HTML 是用来描述网页的一种语言. HTML 包含一些根节点,子节点,文本节点,属性节点,组成, 它通过一系列预定义标签来描述网页结构,如: <title>This is title</title> ,这个表明该网页的标题是 This is title. 什么是CSS? CSS 指层叠样式表 (Cascading Style Sheets),它描述浏览器显示如何显示htm

java进阶06 线程初探

线程,程序和进程是经常容易混淆的概念. 程序:就是有序严谨的指令集 进程:是一个程序及其数据在处理机上顺序执行时所发生的活动 线程:程序中不同的执行路径,就是程序中多种处理或者方法. 线程有两种方法实现 一:继承Thread 覆盖run方法 package Thread; public class Thread1 { public static void main(String[] args){ MyThread1 thread1=new MyThread1(); thread1.setName

数据加密解密初探

在一次网络通信或者是进程通信中,如果传输数据采用明文的方式,那么很容易被第三方"窃听"到,安全性难以保障. 而所谓加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文.--可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的. 在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密. 所谓系统的安全要实现的目标应该包括:机密性-confidentiality,完整性-integrity 和可用性-availa

Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性,不得不说下Http协议.我们常常听到说,Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息.之所以我们在使用ASP.NET WebForm开发中会感觉不到Http的无状态特