使用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作为第二个形状的原因。我想念什么?
答案 0 :(得分:1)
因此,从您的代码中可以看到,您正在尝试创建一个shapeNode,然后将其放置在SKSpriteNode中。多数情况下您是正确的,只是定位代码做错了。
当您将一个子节点添加到节点时,该子节点将父节点用作其参考起点。因此,如果您告诉子节点为-50 X和150 Y,则该子节点距其父节点的中心点将为-50 X和150Y。
当我做子节点(尤其是那些与父节点有很多相似性的子节点)时,我喜欢引用父节点的位置,宽度和高度。我不知道这是否是不好的做法,但这是我两年来所做的。
这就是我要做的:
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))
}