我一直在尝试在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)但是这把一个黑色的视图放在了我的顶层,只有当我把我的英雄带到那里的时候我才能看到它。这意味着如果我把它移到底部,只要我的英雄一走上操纵杆,按钮就会从屏幕上消失。
谁能提供任何方向,我如何添加huds到精灵套件,始终在可见区域的顶部和底部,同时仍然允许英雄在关卡周围移动?
发布于 2015-09-30 08:58:45
您可以将HUD添加为场景的子对象,然后将世界也添加为场景的子对象。这个角色必须是这个世界的孩子。
这样,角色可以在世界上移动,然后世界可以在场景中移动,因此角色可以是可见的,而不会扰乱HUD。
发布于 2016-12-02 17:34:52
Swift 3:
这应该会将您的hud (假设是SKNode)从摄影机的原始anchorPoint (0.5,0.5)移动到CGPoint.zero always visible:
override func didSimulatePhysics() {
hud.position = CGPoint(x:-self.frame.midX,y:-self.frame.midY)
}发布于 2015-09-30 10:08:38
有两个选项可以做到这一点,一个是添加UIButtons到您的视图,它将始终显示在顶部,另一个(我经常使用)是动态设置基于场景锚点的平显设备的位置。
第一种方法非常简单,只需在界面生成器中创建UIButtons和UILabels,它们应该位于场景的顶部(您可能需要摆弄视图层编号才能使其显示在上面)。
另一种方法是在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,在您的情况下可能需要也可能不需要。
https://stackoverflow.com/questions/32855793
复制相似问题