2016-03-27 2 views
1

Моя проблема заключается в том, что HUD не остается в том же положении, но также перемещается вместе с камерой.SpriteKit статический HUD с камерой на плеере

Я пытаюсь создать версию Sokoban, используя swift_boxxle обнаруженный код на Github,

Я добавил новый SKNode под названием mazeWorld, узел камеры и узел 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


Update

Я добавил следующее:

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.com/a/35189679/957768) – rickster

+0

Спасибо, я посмотрю и посмотрю Deerper в GameplayKit с DemoBots (https://developer.apple.com/videos/play/wwdc2015/609/?time=447) –

ответ

1

Как быстро сменяются, вы можете также рассмотреть вопрос об использовании UILabel, который не будут затронуты Сцена SpriteKit.

Если вы хотите придерживаться SKLabelNode с, то в методе didSimulatePhysics, установите HUD сек расположение к cam сек позиции плюс то, что смещение его с самого начала игры. Так что-то вроде:

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

Причина, по которой мы будем с после того, как физика сделано, поэтому он будет двигаться ИЛС после все остальное переместилась, и упаковывают вы используете физику, которые могут повлиять на позицию игрока, все будет хорошо.

+0

Спасибо , Я дал ярлыку go (обновленный вопрос) Я посмотрю, как выглядит представление с данными, которые мне нужны. –

0

Ваша проблема заключается в том, что вы перемещаете узел камеры на всю сцену, но на самом деле вы хотите настроить только ваш мировой узел лабиринта. Я не уверен, как это сделать, но вам нужно будет изучить эту часть.

+0

Я видел некоторый код для CenterOnNode (http://stackoverflow.com/a/30683542) –

+0

CenterOnNode бы только помогите вам в том случае, если вы не планируете перемещать камеру. Ваша проблема в том, что вы хотите переместить сцену, но не переместите HUD, что не может произойти. Вы можете перемещать сцену и перемещать HUD в противоположном направлении (это то, что предлагает Гилдерман, установив положение hud на позицию кулачка), или вы можете просто переместить узел mazeWorld внутри сцены и даже не поменять камеру – Knight0fDragon

+0

Спасибо за информацию –

2

Я не знаком с Boxxle или как это влияет на рабочий процесс, но в контексте набора Sprite: Вы должны добавить узел HUD как дочерний узел вашего узла SKCamera. Таким образом, он не трансформируется остальными детьми сцены (т. Е. Узлом лабиринта).

So cam.addChild(HUD!) вместо addChild(HUD!).

Смежные вопросы