我一直在努力学习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,同时仍允许英雄在该级别移动的方向吗?
答案 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中创建UIButton
和UILabel
,它们应该位于您的场景之上(您可能需要查看视图层数到让它出现在上面虽然)。
另一种方法是在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
,允许您设置偏移量,在您的情况下,您可能需要也可能不需要它。