SKNode 是所有 SpriteKit Node 中的基础类别,像是绘制图形或图片 (SKSpriteNode) 及文字 (SKLabelNode) 等,都是他的子类别。他提供了基本的属性供子类别们使用,可以将它当作一个容器的概念,在 SKNode 中加入其他的子节点,当对父节点进行移动时,子节点也会跟着移动。
例如我们将前一天加的蓝色小方块改放到 SKNode 中,并把 SKNode 加到 Scene 中,运行起来的结果会跟将蓝色小方块直接加到 Scene 中无差异。
addChild
方法, 并带入要加入的节点。let node = SKNode()
self.addChild(node)
let spriteNode = SKSpriteNode(color: .blue, size: CGSize(width: CGFloat(20), height: CGFloat(20)))
node.addChild(spriteNode)
接着若是对 SKNode 进行位置上的移动,蓝色小方块也会跟着移动
node.position = CGPoint(x: 0, y: 200)
这样做的好处是,当节点变多时,可以更有系统的管理加进Scene中的节点。
SKSpriteNode 可以让我们绘制图形或图片
刚刚前面已经看过新增图形的范例,需配置他的颜色 (color) 及尺寸 (size)
let spriteNode = SKSpriteNode(color: .blue, size: CGSize(width: CGFloat(20), height: CGFloat(20)))
self.addChild(spriteNode)
而新增图片的方式,需配置档案名称 (imageNamed)。
在使用 Playground 时,可以拖拉图片放进左侧档案列表的 Resources 里。
若是在开发专案时,可以拖拉图片放进左侧档案列表的 Assets.xcassets 里。
接着写上程序码,把 "tree" 带进去:
let spriteImg = SKSpriteNode(imageNamed: "tree")
self.addChild(spriteImg)
画面中就出现一棵树了
在 SpriteKit 的世界中,画面的原点在左下角,用(0, 0)代表。
可以透过 anchorPoint 属性来对 node 做个别的设定,预设系统会设定为中央 (0.5, 0.5),因此刚刚加的树节点会出现在画面的正中间。
我们将 anchorPoint 改为左上角观察看看:
spriteImg.anchorPoint = CGPoint(x: 0, y: 1)
可以发现树本身以左上角当作定位点,而父层场景的定位点是(0.5, 0.5),因此可以看到树的左上角定在父层的中心
若将场景的定位点也改成左上角:
self.anchorPoint = CGPoint(x: 0, y: 1)
可以看到整个场景被移到左上角了
position 属性代表的是自己在父节点中的位置,会依据父节点的 anchorPoint 来做位置上的移动,预设值是 (0.0, 0.0)。两个数字分别代表x轴及y轴的位置。
以 anchorPoint 为基准:
现在试着将树调整为对齐底部
我们先将刚刚调整的 anchorPoint 还原,先单纯将树的 position 调整至置底的位置,因场景的 anchorPoint 为预设 (0.5, 0.5),故需取画面高度的一半,且是负数的。
spriteImg.position = CGPoint(x: 0, y: -self.size.height / 2)
可以看到树往下移动了
但因为现在树的 anchorPoint 还是 (0.5, 0.5),需将树的 anchorPoint 改为置底
spriteImg.anchorPoint = CGPoint(x: 0.5, y: 0)
我们顺利达成想要的效果了!
我们可以直接在 .sks 场景中新增一个文字节点,像是 Playground 给的范例,画面中已经有 "Hello, World!"
也可以透过程序码的方式,使用 SKLabelNode 新增文字节点
新增一个文字节点到画面上,需带入它的文字内容
let labelNode = SKLabelNode(text: "Tree")
self.addChild(labelNode)
文字出现在画面正中间了
我们可以透过属性改变文字的样貌
fontColor
给文字颜色fontSize
给文字大小let labelNode = SKLabelNode(text: "Tree")
labelNode.fontColor = UIColor.green
labelNode.fontSize = CGFloat(60)
self.addChild(labelNode)
文字从小变大,而且变成绿色了
接着我们可以调整它的位置,想将它调整到画面的左上方
调整 position
为左上角的位置
horizontalAlignmentMode
可以调整它的水平对齐模式verticalAlignmentMode
可以调整它的垂直对齐模式我们将它调整为水平置左、垂直置顶
let labelNode = SKLabelNode(text: "Tree")
labelNode.fontColor = UIColor.green
labelNode.fontSize = CGFloat(60)
labelNode.position = CGPoint(x: -self.size.width / 2, y: self.size.height / 2)
labelNode.horizontalAlignmentMode = .left
labelNode.verticalAlignmentMode = .top
self.addChild(labelNode)
文字出现在画面左上角了
SpriteKit 的基本介绍到今天就告一段落。
明天会进入游戏设计的部分!
参考来源:
SpriteKit Framework
硬体选择 -- Part 2 简介 昨天已经提过了最重要的 GPU 了,那今天会着重在其他的零件上,...
函式建构式建立原型 前面几篇有提到,可以使用函示建构式、或是 ES 6 来建立原型,今天就来介绍使用...
继昨天介绍完<activity_main.xml>之後,今天要来介绍程序档<Mai...
CollectionView:Storyboard、Xib + Collection View + ...
实作自己的全域 count, setCount codesandbox demo const { c...