SpriteKit官方文档翻译和学习(二)---Jumping into Sprite Kit
深入SpriteKit
学习Sprite Kit最好的途径是实战,下面通过一个例子来初探SpriteKit。通过这个例子,你将会学到以下内容:
在一个以SpriteKit框架为基础的游戏中使用场景(scenes)。组织节点数并绘制内容。
使用动作(actions)为场景内容做动画。
为一个场景添加交互。
场景之间的切换。
场景中的模拟物理环境。
创建项目
整个项目需要使用Xocde5.0的集成开发环境。使用Single View Application模版创建项目。创建项目的时候使用以下参数:
Product Name:SpriteWalkthroughClass Prefix:SpriteDevices: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]; }];}当场景处理每一帧的时候,都会执行动作和模拟物理环境。这时你的游戏也会在这个时候执行一些其他的自定义代码。现在,当应用运行到一个新的帧动画的时,它在物理环境下,将移出屏幕外的岩石移除,所以,当程序运行时,帧频就比较稳定了。