首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

SpriteKit官方文档翻译跟学习(二)-Jumping into Sprite Kit

2013-09-28 
SpriteKit官方文档翻译和学习(二)---Jumping into Sprite Kit深入SpriteKit学习Sprite Kit最好的途径是实

SpriteKit官方文档翻译和学习(二)---Jumping into Sprite Kit
深入SpriteKit

学习Sprite Kit最好的途径是实战,下面通过一个例子来初探SpriteKit。通过这个例子,你将会学到以下内容:

在一个以SpriteKit框架为基础的游戏中使用场景(scenes)。
组织节点数并绘制内容。
使用动作(actions)为场景内容做动画。
为一个场景添加交互。
场景之间的切换。
场景中的模拟物理环境。
创建项目

整个项目需要使用Xocde5.0的集成开发环境。使用Single View Application模版创建项目。创建项目的时候使用以下参数:

Product Name:SpriteWalkthrough

Class Prefix:Sprite

Devices:iPad

创建你的第一个场景

Sprite Kit框架内容像其他可视内容一样被放置于一个Window视窗里。SptiteKit框架里的内容都是通过SKView类进行渲染,通常都是首先渲染场景,场景是一个SKScene对象。场景也参与响应链,同时还拥有一些专为游戏匹配的其他特性。

因为SpriteKit框架内容是通过一个视图对象渲染出来的,所以你可以将这个视图与其他视图按照视图层级关系排列。例如你可以创建一个按钮控制层放置在SpriteKit视图之上。或者,你还可以通过按钮为sprite添加交互。之后的例子中,你将看到如何为场景添加交互。


使用Sptite Kit来配置视图控制器

    打开项目里的storyboard。它只有一个单独的视图控制器(SpriteViewontroller)。选择视图控制器的view视图对象,将它的class改为SKView。

    在视图控制器的实现文件头部添加下面代码。

    #import <SpriteKit/SpriteKit.h> @interface HelloScene : SKScene @end
    你不需要做任何修改在视图控制器实现文件中导入场景类的头文件。
    - (void)viewWillAppear:(BOOL)animated{    HelloScene* hello = [[HelloScene alloc] initWithSize:CGSizeMake(768,1024)];    SKView *spriteView = (SKView *) self.view;    [spriteView presentScene: hello];}
    运行。
    程序运行后会显示一个场景,但是是空的,只有性能调试信息模块。
    为你的场景添加内容

    当你制作一款基于SpriteKit框架的游戏时,你可能会根据模块为你的游戏创建不同的场景。例如,为你的主菜单创建一个单独的场景、为你的游戏模块分配一个场景。我们的这个例子也遵循相同的设计,第一个场景显示一个“Hello World”文本。

     通常情况下,我们是在场景已经被视图显示出来的时候为场景创建内容。这个例子中,代码应该写在didMoveToView:方法中,说明场景已经被加载到视图中。

    在场景中显示Hello World文本

      在场景实现文件中添加一个属性,来判断场景是否为自身已经创建了内容。
      你的实现文件应该如下:
      - (void)createSceneContents{    self.backgroundColor = [SKColor blueColor];    self.scaleMode = SKSceneScaleModeAspectFit;    [self addChild: [self newHelloNode]];}

      为场景定义背景颜色,这里的颜色定义使用的是SKColor,它并不是一个类,它是指向UIColor的一个宏。只是为了让代码更统一。

      场景的scaleMode属性确定场景如何缩放来适应视图(这个例子中我四个属性都试了,没看出变化来,知道的讲解一下,请赐教)。
      实现场景的newHelloNode方法。
      -(void)didSimulatePhysics{    [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {        if (node.position.y < 0)            [node removeFromParent];    }];}
      当场景处理每一帧的时候,都会执行动作和模拟物理环境。这时你的游戏也会在这个时候执行一些其他的自定义代码。现在,当应用运行到一个新的帧动画的时,它在物理环境下,将移出屏幕外的岩石移除,所以,当程序运行时,帧频就比较稳定了。





    热点排行