2016-03-27 128 views
1

我的問題是HUD並沒有停留在相同的位置,但與相機移動也。SpriteKit靜態HUD與播放器上的攝像頭

我試圖創建一個使用Github上找到swift_boxxle代碼,

我添加了一個名爲mazeWorld新SKNode,相機節點和HUD節點的推箱子的版本。

var mazeWorld: SKNode? 
let cam = SKCameraNode() 
var HUD: SKNode? 

在我的didMoveToView中,我將mazeWorld和HUD都添加到了場景中。

override func didMoveToView(view: SKView) { 
    HUD = SKNode() 
    addChild(HUD!) 

    mazeWorld = SKNode() 
    addChild(mazeWorld!) 

    self.camera = cam 
    ... 
    initMenu() 
} 

我使用的更新功能來設置相機位置的球員位置:

override func update(currentTime: CFTimeInterval) { 
    cam.position = player.sprite.position 
} 

我有其他功能設置菜單

func initMenu() { 
    menuReset.text = "[reset]" 
    menuReset.fontSize = 20 
    menuReset.fontColor = SKColor.whiteColor() 
    menuReset.position = CGPoint(x: self.size.width/2, y: self.size.height/2 - 20) 
    menuReset.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left; 
    ... 
    HUD!.addChild(menuMain) 
} 

Sample moves


更新

我增加了以下內容:

let label = UILabel(frame: CGRectMake(0, 0, 200, 21)) 
    label.textAlignment = NSTextAlignment.Center 
    label.text = "I'am a test label" 
    label.textColor = UIColor.whiteColor() 
    self.view!.addSubview(label) 

隨着SO Answer

var frame: CGRect = label.frame 
    //align on top right 
    let xPosition: CGFloat = CGRectGetWidth(view.frame) - CGRectGetWidth(frame) 
    frame.origin = CGPointMake(ceil(xPosition), 0.0) 
    label.frame = frame 
    //autoresizing so it stays at top right (flexible left and flexible bottom margin) 
    view.autoresizingMask = [.FlexibleLeftMargin, .FlexibleBottomMargin]  
+0

可能的[Swift:使控制按鈕不能移動相機]的副本(http://stackoverflow.com/questions/35351702/swift-make-control-buttons-not-move-with-camera) – rickster

+0

另請參見[在SpriteKit中圍繞場景的背景進行攝像](http:// stackoverflow。(https://developer.apple.com/videos/play/wwdc2015/609/?time=447) – rickster

回答

1

作爲一個快速交替,您可能還需要考慮使用UILabel它不會被影響SpriteKit場景。

如果你想與SKLabelNode s到粘然後在didSimulatePhysics方法,設置HUD的位置到cam的地位加任何偏移它從遊戲開始了。因此,像:

override func didSimulatePhysics() { // I forget if this has a parameter 
    HUD.position = cam.position; 
} 

的原因,我們與之後的物理完成的,因此會後一切移動HUD移動去,櫃面你使用可能影響玩家的位置物理學,一切都會好起來的。

+0

謝謝,我給了標籤去(更新的問題) 我會看到如何與我需要的信息視圖 –

0

你的問題是你在整個場景中移動攝像機節點,但實際上你只想調整你的迷宮世界節點。我不確定如何做到這一點,但您需要研究這部分

+0

我見過一些代碼CenterOnNode(http://stackoverflow.com/a/30683542) –

+0

CenterOnNode會只有在你不打算移動相機的情況下才能幫助你。你的問題是你想要移動場景,但不能移動HUD,那是不可能發生的。您可以移動場景並以相反的方向移動HUD(這是Gilderman通過將hud位置設置爲凸輪位置所暗示的),或者您可以在場景內移動mazeWorld節點,甚至不用更改相機 – Knight0fDragon

+0

感謝您的信息 –

2

我不熟悉Boxxle或者它如何影響您的工作流程,但是在Sprite Kit中: 您應該將HUD節點添加爲您的SKCamera節點的子節點。這樣,它不會與場景的其餘部分(即迷宮節點)一起轉換。

因此cam.addChild(HUD!)而不是addChild(HUD!)