将 SKShapeNode 作为子级添加到 SKSpriteNode
Posted
技术标签:
【中文标题】将 SKShapeNode 作为子级添加到 SKSpriteNode【英文标题】:Adding SKShapeNode as Child to SKSpriteNode 【发布时间】:2018-08-26 19:25:53 【问题描述】:使用 SpriteKit,我正在尝试创建一个矩形作为背景,第二个矩形是背景大小的 25%,并将其放置在背景的底部。 (所以下面的 25% 是蓝色,上面的 75% 是深灰色)
这是我的设置:
screenWidth = size.width //312
screenHeight = size.height //390
func createSky()
let sky = SKSpriteNode(color: SKColor.darkGray, size: CGSize(width: screenWidth, height: screenHeight))
print("Sky: ", sky.frame)
addChild(sky)
func createGround()
let ground = SKShapeNode.init(rectOf: CGSize(width: screenWidth, height: screenHeight / 4))
ground.fillColor = SKColor.blue
print("Ground: ", ground.frame )
sky.addChild(ground)
出于某种原因,ground.frame
正在打印Ground: (-157.35, -50.1, 314.7, 100.2)
。为什么是这样?最后两位不应该是312、97.5吗?
我尝试了各种 .positions
和 .anchorPositions
,但我仍然无法让 SKShapeNode 正确地位于 SKSpriteNode 中。
最终形状会更复杂,这就是为什么我不使用 Sprite 作为第二个。我错过了什么?
【问题讨论】:
你确定屏幕宽度是 312 吗?这是一个奇怪的尺寸 【参考方案1】:所以从您的代码来看,您正在尝试创建一个 shapeNode,然后将其放置在您的 SKSpriteNode 中。大部分你做对了,你只是定位代码不正确。
当您将子节点添加到节点时,该子节点会将父节点用作其参考点。因此,如果您告诉子节点为 -50 X 和 150 Y,则该子节点将距其父节点的中心点为 -50 X 和 150 Y。
当我做子节点(尤其是那些与父节点有很多相似之处的节点)时,我喜欢参考父节点的定位、宽度和高度。我不知道这是否是不好的做法,但这是我两年来所做的。
这就是我的做法:
var sky = SKSpriteNode()
var ground = SKShapeNode()
func createSky()
sky = SKSpriteNode(color: SKColor.darkGray, size: CGSize(width: self.frame.size.wdith, height: self.frame.size.height))
// self.frame.size.width/self.frame.size.height calls its info from the ViewController, which is tied directly to your screen size (unless otherwise changed)
sky.position = CGPoint(x: 0,y: 0)
self.addChild(sky)
func createGround()
ground = SKShapeNode((rectOf: CGSize(width: sky.width, height: sky.height * 0.25))
ground.position = CGPoint(x: 0, y: sky.position.y - (ground.size.height / 1.5))
【讨论】:
那太好了。谢谢你。我一定对 SpriteKit 的坐标感到困惑。感谢发帖。以上是关于将 SKShapeNode 作为子级添加到 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章
将发射器节点添加到 sks 文件并使用它 - XCode 6.0 + swift
添加的 View 将 RecyclerView 作为父级,但视图不是真正的子级