spritekit 动画_iOS 2D游戏引擎框架SpriteKit入门

最近用闲暇时间了解了下iOS 7.0 SDK就提供的一个2D游戏引擎框架SpriteKit,用此实现了一个之前比较流行的游戏“保卫萝卜”中的一个小场景,毕竟有具体需求的实践能提高学习效率,在此做个记录总结。

SpriteKit主要用来做2D游戏,将图形渲染和动画用于任意一个精灵,游戏中的任意一个图像元素都可以理解为一个精灵,我们要做的就是通过SpriteKit来管理这些精灵,让它们像我们预想的方向展现或变化。

同样SDK还提供了3D渲染引擎SceneKit,和GPU优化的底层接口来渲染3D图形的API Metal,这些之后再来学习。

先预览一下实现后的小游戏。

保卫萝卜

一、工程搭建

游戏的工程搭建我们可以直接创建一个XCode提供的Game Project模板,也可以直接在已有的工程中使用。

1、Game 模板

在创建工程处选择Game模板,路径File->New->Project->Game,样式见下图。

Game模板

Language选择你喜欢用的Objective-C或Swift,Game Technology这里选择SpriteKit。创建完成后目录结构如下。

模板目录结构

工程会默认生成一个“Hello,World”的Demo,运行起来可以直接看到效果,按下、抬起、移动手指的交互动作都做了动画,可以感受下。

根视图GameViewController中,调用了GameScene,Hello Wold所有的精灵展现及动画都是在GameScene中处理的。所以想要开始开发游戏之前,需要先将这个Hello World Demo相关内容清理掉。视图文件GameScene.sks、动画文件Actions.sks、源码文件GameScene.h、GameScene.m都删除,并将GameViewController中的viewDidLoad函数中创建并使用GameScene的代码也相应删除掉。这样就可以在这个GameViewController中创建并使用我们要做的Scene了。

2、已有的工程中开发游戏

在想要实现游戏的界面,将Storyboard或Xib中ViewController的根View,Class类由UIView改成SKView,因为游戏框架的元素都要使用SpriteKit提供的类来实现,方便管理精灵。这样就跟Game模型中的GameViewController一样了。

二、开始使用

1、创建Scene文件并在ViewController中调用

创建MyScene文件,继承SKScene,后续游戏的内容都将在这个页面开发。# MyScene.h

import

@interface MyScene : SKScene

@end# MyScene.m

#import "GameScene.h"

@implementation GameScene

@end

在游戏页面的ViewController中,创建一个SKView,用于展现才刚创建的MyScene。IBOutlet SKView *_sceneView;

在Xib或Storyboard中添加UIView,将类改为SKView,关联即可。

在ViewController中的viewDidLoad中调用MyScene。// Create and configure the scene.

CGSize size = CGSizeMake(_sceneView.bounds.size.height, _sceneView.bounds.size.width);

MyScene * scene = [MyScene sceneWithSize:size];

scene.scaleMode = SKSceneScaleModeAspectFill;

// Present the scene.

[_sceneView presentScene:scene];

MyScene已经调用完成,后续精灵的展现、动画都在MyScene文件里添加。

2、在MyScene中添加精灵// 添加背景

- (void)addBackground {

SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"bg"];

background.name = @"bg";

background.size = CGSizeMake(self.size.width, self.size.height);

background.position = CGPointMake(background.size.width/2, background.size.height/2);

[self addChild:background];

}

基本图片类的精灵都是通过SKSpriteNode对象来创建,通过spriteNodeWithImageNamed:函数可以将图片做成精灵对象,通过name属性为其命名,用户点击等操作可以通过名字判断出是哪个精灵,后面会介绍到。通过size和postion属性可以指定精灵的宽高和位置。

同样的方法将游戏中用到的一些静态精灵都摆放上去。- (id)initWithSize:(CGSize)size{

if (self = [super initWithSize:size]) {

self.backgroundColor = [SKColor whiteColor];

[self addBackground];    // 背景

[self addFlag];                // 起点

[self addCarrot];             // 终点

[self addStaticObject];    // 其他的羊头、石头、宝箱等装饰物

}

return self;

}

SKColor在iOS上就是UIColor,可以看下定义,是为了在MacOS上和iOS上统一使用,也方便移植。#if TARGET_OS_IPHONE

#define SKColor UIColor

#else

#define SKColor NSColor

#endif

添加完这些精灵的样式如图。

九个精灵

3、为精灵添加动画这里要涉及到SKAction,简单介绍一下,因为游戏的大部分动作行为都是它来实现的。

SKAction可以实现的动作有很多,列举几个常用的

1、相对位移或绝对位

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值