我们通常继承SKSpriteNode来实现游戏中的元素,除了可以使用图片作为纹理皮肤外。我们还可以使用动画纹理集来实现动画播放。
--- 神经猫类 Cat.swift ---
--- 元件使用 GameScene.swift ---
动画纹理集的制作也很简单,首先要有一套动画序列图,然后把它们放到一个文件夹下,最后把文件夹改名为*.atlas后缀就行了。
下面通过一个“神经猫”动画元件来演示:
--- 神经猫类 Cat.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import
SpriteKit
class
Cat
:
SKSpriteNode
{
//神经猫的纹理集
let
dbAtlas =
SKTextureAtlas
(named:
"db.atlas"
)
//神经猫的纹理数组
var
dbFrames = [
SKTexture
]()
override
init
() {
//获取纹理集的第一个纹理
let
texture = dbAtlas.textureNamed(
"db_01"
)
//获取纹理的尺寸
let
size = texture.size()
//执行父类的构造方法
super
.
init
(texture:texture,color:
SKColor
.whiteColor(),size:size)
var
i:
Int
var
tempName:
String
//从纹理集中获取纹理加入数组
for
i=1 ; i <= dbAtlas.textureNames.count ; i++ {
//%.2d表示两位整数。下面格式化完毕后便是db_01,db_02,db_03等
tempName =
String
(format:
"db_%.2d"
,i)
let
dbTexture = dbAtlas.textureNamed(tempName)
dbFrames.append( dbTexture )
}
//设置中心点
self
.anchorPoint =
CGPointMake
(0.5, 0.2)
//播放动画
db()
}
required
init
(coder aDecoder:
NSCoder
) {
fatalError(
"init(coder:) has not been implemented"
)
}
func
db(){
//循环播放纹理动画
self
.runAction(
SKAction
.repeatActionForever(
SKAction
.animateWithTextures(dbFrames, timePerFrame: 0.2)))
}
}
|
--- 元件使用 GameScene.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import
SpriteKit
class
GameScene
:
SKScene
{
//利用lazy关键字可以让实例化在第一次使用时才执行
lazy
var
cat =
Cat
()
//当切换到这个场景视图后
override
func
didMoveToView(view:
SKView
) {
cat.position =
CGPoint
(x:
CGRectGetMidX
(
self
.frame)-10, y:
CGRectGetMidY
(
self
.frame)-150);
cat.zPosition = 20
self
.addChild(cat)
}
//响应屏幕点击的方法
override
func
touchesBegan(touches:
NSSet
, withEvent event:
UIEvent
) {
}
}
|