Sprite Kit编程指南(1)-深入Sprite Kit (三)

2014-11-23 22:13:24 ? 作者: ? 浏览: 22
quence:@[moveUp, zoom, pause, fadeAway, remove];
[helloNode runAction:moveSequence];
}
}
为了防止节点响应重复按压,代码会清除节点的名称。然后,它构建动作对象来执行各种操作。最后,它组合这些动作创建一个动作序列;序列运行时,按顺序执行每个动作。最后,它告诉标签节点执行序列动作。

运行的应用程序。你应该看到像之前那样的文字。在屏幕的底部,节点计数应该是1。现在,点击视图内部。你应该看到文字动画并淡出。在它淡出后,节点计数应该变为0,因为节点已从父节点中删除。


场景之间的转换


Sprite Kit让场景之间的过渡变得很容易。场景之间的过渡时,你可以坚持保留它们,或清除它们。在这个例子中,你将创建第二个场景类,来学习一些其他的游戏行为。“Hello, World!”文字从屏幕上消失时,代码创建一个新的场景并过渡到它。Hello场景过渡在后会被丢弃。


创建飞船场景


1. 创建一个名为SpaceshipScene的新类并让它成为SKScene类的子类。

2. 实现代码来初始化飞船场景的内容。此代码类似于你为HelloScene类实现的代码。


[cpp]
@interface SpaceshipScene()
@property BOOL contentCreated;
@end

@implementation SpaceshipScene
- (void)didMoveToView:(SKView *)view
{
If(!self.contentCreated)
{
[self createSceneContents];
self.contentCreated = YES;
}
}

- (void)createSceneContents
{
self.backgroundColor = [SKColor blackColor];
self.scaleMode = SKSceneScaleModeAspectFit;
}

@interface SpaceshipScene()
@property BOOL contentCreated;
@end

@implementation SpaceshipScene
- (void)didMoveToView:(SKView *)view
{
If(!self.contentCreated)
{
[self createSceneContents];
self.contentCreated = YES;
}
}

- (void)createSceneContents
{
self.backgroundColor = [SKColor blackColor];
self.scaleMode = SKSceneScaleModeAspectFit;
}3. 在HelloScene.m文件中导入SpaceshipScene.h头。


[cpp]
#import "SpaceshipScene.h"

#import "SpaceshipScene.h"
4. 在touchesBegan:withEvent方法中,更改runAction:的调用为新的调用runAction:completion:。实现完成处理来创建并呈现一个新的场景。


[cpp]
[helloNode runAction:moveSequence completion:^ {
SKScene * spaceshipScene = [[SpaceshipScene alloc] initWithSize:self.size];
SKTransition *doors= [SKTransition doorsOpenVerticalWithDuration:0.5];
[self.view presentScene:spaceshipScene transition:doors];
}];

[helloNode runAction:moveSequence completion:^ {
SKScene * spaceshipScene = [[SpaceshipScene alloc] initWithSize:self.size];
SKTransition *doors= [SKTransition doorsOpenVerticalWithDuration:0.5];
[self.view presentScene:spaceshipScene transition:doors];
}];构建并运行该项目。当你触摸场景内部时,文字淡出,然后在视图过渡到新的场景。你应该看到一个黑色的屏幕。


使用节点构建复杂的内容


新的场景还没有任何内容,所以你准备要添加一个飞船到场景。要构建这个太空飞船,你需要使用多个SKSpriteNode对象来创造了飞船和它表面的灯光。每个精灵节点都将执行动作。

精灵节点是在一个Sprite Kit应用程序中最常见用于创建内容的类。他们可以绘制无纹理或纹理的矩形。在这个例子中,你要使用无纹理对象。稍后,这些占位符(placeholder)可以很容易地用纹理精灵进行替换,而不改变它们的行为。在实际的游戏中,你可能需要几十个或上百个节点来创建你的游戏的可视化内容。但是,从本质上说,那些精灵将使用与这个简单的例子相同 的技术。

虽然你可以直接添加所有三个精灵到场景,但这并不是Sprite Kit的方式。闪烁的灯光是飞船的一部分!如果飞船移动,灯光应该和它一起移动。解决的办法是使飞船节点成为它们的父节点,同样地场景将是飞船的父节点。光的坐标将要相对于父节点的位置来指定,而父节点是在子精灵图像的中心。


添加飞船


1. 在SpaceshipScene.m中,添加代码到createSceneContents方法来创建飞船。


[cpp]
SKSpriteNode *spaceship = [self newSpaceship];
spaceship.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)-150);
[self addChild:spaceship];

SKSpriteNode *spaceship = [self newSpaceship];
spaceship.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame)-150);
[self addChild:spaceship];
2. 实现newSpaceship的方法。


[cpp]
- (SKSpriteNode *)newSpaceship
{
SKSpriteNode *hull= [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(64,32);

SKAction *hover= [SKAction sequence:@[

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: