上一节我们讲了如何用图片创建加入精灵,我们创建了2个精灵,都是用同一张图片
我们加入一段代码,把第二个加入的精灵颜色改变下,改成红色,这个方法我不说,以后讲动作时再讲。
override func didMoveToView(view: SKView) {
//用一张图片初始化一个精灵
let ship = SKSpriteNode(imageNamed: "Spaceship")
//设置精灵坐标
ship.position = CGPoint(x: 500, y: 400)
//添加精灵到当前视图中
self.addChild(ship)
//用一个纹理(也是一张图片)初始化一个精灵
let texture = SKTexture(imageNamed: "Spaceship")
let secondShip = SKSpriteNode(texture: texture)
secondShip.position = CGPoint(x: 500, y: 500)
self.addChild(secondShip)
//改变红色
secondShip.runAction(SKAction.colorizeWithColor(UIColor.redColor(), colorBlendFactor: 1, duration: 0.1))
}
模拟器截图
我们可以清楚看到,第二个飞船覆盖了第一个,为什么?因为第二个飞船是是在第一个飞船之后addChild当前视图里面的,第一个飞船渲染后,第二个飞船再渲染的,所以第二个能覆盖第一个。我们改变下addChild加入视图的顺序
self.addChild(secondShip)
self.addChild(ship)
模拟器截图
这样,第一个精灵就覆盖了第二个精灵,但是每个精灵的顺序这样调节太累了,如何用简单的方式设置精灵的渲染次序,有的,就是精灵的zPosition属性
,值越大,越后渲染,太复杂了,这样想吧,值大的精灵就能覆盖值小的精灵
默认精灵zPosition为0.就要通过addChild手动调节加入次序,设置了zPosition,就不需要关心addChild次序了。
当前是第一个覆盖了第二个精灵。我们来改成第二个覆盖第一个,只要第二个zPosition值比第一个大就行。
在原代码底部加入2行
ship.zPosition = 0
secondShip.zPosition = 1
模拟器
你看这样,第二个红色的精灵就覆盖了第一个了吧。