标签:sprite-kit sprite node swift
上文讲到新的场景空无一物,略显凄凉,因此今天我们今天首要任务就是往里面填东西,比如:一架简陋的太空船。友情提示:请勿过分憧憬项目最后会给你呈现一架华丽的飞机。orz…..
我始终坚信把基础知识讲清楚,将全面,简单化比那些所谓的长篇大论、举例无数的书本来的美妙。因此我们首先来理清一下几个东西:
关键的几个概念:
SKView: 在SpriteKit
中扮演着作为视图呈现内容的重要角色,继承于UIView
。
SKNode: 是SpriteKit
中最最最最”老”的祖先,也就是父类。要知道Sprite Kit
中最基本的东东就是节点(Node
),举个不恰当的例子,分子原子组成了我们的世界(打个比方而已,别较真,博主化学不好),节点就好比是分子原子组成了Sprite Kit
的世界!那么世界上其他物种,比如树、泥土、动物都是由分子原子构成才有了形形色色的世界,同理在Sprite Kit
世界中,采用继承方式来创建新的“Node”,比如SKScene
、SKSpriteNode
、SpriteShapeNode
等等各司其职,从继承关系来说它们都是源自SKNode
,从本身来说不但继承了父类的属性方法,自己又开辟了一条道路。
节点树:首先请你抛开继承关系,来谈谈节点树,现在我们所知道的是在Sprite Kit
中都是由Node
组成。想象现在我们正在制作一款游戏,先要有一个场景(SKScene
),这是根节点;接下来可能需要来个文本(SKLabelNode
)来简单说下东西,再来一架飞机(SKSpriteNode
),它们都是隶属于场景中的,就是在根节点下分叉成2股;对了飞机上得搞个灯光,因此你在飞机节点上添加一个灯光(可能就是图片拉,当然也是SKSpriteNode
),这样在飞机节点下又加了一个节点。是不是有点树的感觉了??
理解完上面的概念,是时候来实战一把了:
通常我们使用SKSpriteNode
类来新增一些场景的内容,它对有纹理和无纹理对象都通吃!本文中我们创建一个没有纹理(无图片)的长方形,美名约:飞船。但是现在由于没有纹理,可能看上去很丑,不过这都预留着,假如有一天你发现了一个合适的图片,就给你的飞船换上吧。实际开发中,你可能需要创建数十个,或者上百个节点来呈现一个丰富的场景,但是基本原理都是差不多的拉!
本文中,首先创建一个飞船的骨架,就是一个长方形,此外还要创建灯光,这里就有两个Sprite node
了,但是我们不应该将他们都添加到场景中,为什么?因为灯光要随着飞船移动而移动,所以灯光sprite Node
应该添加到飞船这个sprite node
上,不难理解吧?
在SpaceshipScene.swift
文件中找到createSceneContents
方法添加新内容:
let spaceship:SkSpriteNode = newSpaceship()
spaceship.position = CGPointMake(CGRectGetMidX(self.frame),
CGRectGetMidY(self.frame)-150)
self.addChild(spaceship)
实现newSpaceship
方法:
func newSpaceship()->SKSpriteNode{
//船体叫做hull
let hull = SKSpriteNode(color: SKColor.grayColor(), size: CGSizeMake(64, 32))
//创建动作 sequence传入的要是一个数组[],里面有4个动作,简单!
let hover = SKAction.sequence
let hover = SKAction.sequence([
SKAction.waitForDuration(1.0),
SKAction.moveByX(100, y: 50, duration: 1.0),
SKAction.waitForDuration(1.0),
SKAction.moveByX(-100, y: -50, duration: 1.0),
])
hull.runAction(SKAction.repeatActionForever(hover))
}
现在来Build and Run 下,看看效果。
刚才我们创建了船体,现在来增加飞船的灯光,在newSpaceship
函数最下面添加以下代码:
//实例化一个灯光,该函数在下面给出
let light1 = newLight()
light1.position = CGPointMake(-28.0,6.0)
hull.addChild(light1)
//实例化第二个灯光
let light2 = newLight()
light2.position = CGPointMake(28.0,6.0)
hull.addChild(light2)
实现newLight
代码
func newLight()->SKSpriteNode{
//纯手工敲代码,代码都是官方文档OC写的
//对着文档直接翻译成swift,有不对之处请留言
let light = SKSpriteNode(color: SKColor.grayColor(),
size:CGSizeMake(8, 8))
let blink = SKAction.sequence([
SKAction.fadeOutWithDuration(0.25),
SKAction.fadeInWithDuration(0.25),
])
let blinkForever = SKAction.repeatActionForever(blink)
light.runAction(blinkForever)
return light
}
标签:sprite-kit sprite node swift
原文地址:http://blog.csdn.net/colouful987/article/details/44157215