Swift / Sprite-kit添加一个始终位于顶部和底部的静态hud,可移动游戏位于中间?

时间:2015-09-30 00:18:24

标签: sprite-kit swift2 xcode7

我一直在努力学习xcode7中的spritekit。到目前为止,我有一个比屏幕大的水平,一个可以移动的英雄和一个跟随英雄的摄像机,当他离开可视屏幕区域时。接下来,我试图在屏幕的顶部和底部创建一个hud。最下面的一个是操纵杆/按钮的位置。

我试过这样的事情:

let hud = SKSpriteNode(color: SKColor.blackColor(), size: CGSizeMake(self.size.width, self.size.height * 0.05))
hud.anchorPoint = CGPointMake(0, 0)
hud.position = CGPointMake(0, (self.view?.bounds.height)! - hud.size.height)
self.addChild(hud)

但是这会将黑色视图放在我的关卡的顶部,如果我把我的英雄带到那里,我只能看到它。这意味着如果我将它移到底部,一旦我的英雄走上操纵杆并且按钮将离开屏幕。

任何人都可以提供任何关于我如何将spud添加到可视区域的顶部和底部的sprite-kit,同时仍允许英雄在该级别移动的方向吗?

3 个答案:

答案 0 :(得分:1)

您可以将HUD添加为场景的子项,然后将世界添加为场景的子项。角色必须是世界的孩子。

这样,角色可以在世界各地移动,然后可以在场景中移动世界,这样角色就可以看到,而不会弄乱HUD。

答案 1 :(得分:1)

斯威夫特3:

这应该将您的hud(假设是SKNode)从相机的原点anchorPoint(0.5,0.5)移动到始终可见的CGPoint.zero

override func didSimulatePhysics() {
        hud.position = CGPoint(x:-self.frame.midX,y:-self.frame.midY)
}

答案 2 :(得分:0)

有两个选项可以做到这一点,一个是将UIButton添加到您的视图中,它始终显示在顶部,另一个(我经常使用)是基于关闭动态设置hud的位置场景的锚点。

第一种方法非常简单,只需在Interface Builder中创建UIButtonUILabel,它们应该位于您的场景之上(您可能需要查看视图层数到让它出现在上面虽然)。

另一种方法是在didSimulatePhysics方法中放入一些代码(仅在更新后调用,并在物理模拟之后调用)。基本上,做你正在做的事情,并将hud的位置设置为场景anchorPoint乘以场景的宽度和高度。这样的事情(我的Swift有点粗糙):

let x = (((-self.scene.anchorPoint.x) * self.frame.size.x) + anyOffsetRequired.x)
let y = (((-self.scene.anchorPoint.y) * self.frame.size.y) + anyOffsetRequired.y)
hud.position = CGPointMake(x, y)

-上的anchorPoint是由于移动场景anchorPoint的工作方式(向右移动需要为负,向下移动需要为正)。 anyOffsetRequired只是一个CGPoint,允许您设置偏移量,在您的情况下,您可能需要也可能不需要它。