2015-12-31 4 views
0

Я делаю игру с помощью Sprite Kit, и я хочу иметь возможность перетаскивать коробки, когда они перемещаются по экрану.Перетаскивание детей одного и того же спрайта

Вот суть кода: Я порою коробки на таймере, и они перемещаются по экрану.

override func didMoveToView(view: SKView) { 
    let timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnBox"), userInfo: nil, repeats: true) 
} 
func spawnBox() { 
    /*  Set up the box  */ 

    addChild(box) 

    let boxMoveDown = SKAction.moveToY(-100, duration: 5.0) 
    let actionDone = SKAction.removeFromParent() 
    box.runAction(SKAction.sequence([boxMoveDown, actionDone])) 
} 

Но проблема в том, я, как я могу переместить конкретный ребенка, который я прикасаясь, не затрагивая все остальные «дети»? Я понимаю, что на данный момент каждый раз, когда я создаю коробку, это точно так же, поэтому я не могу быть конкретным, когда я устанавливаю позицию отдельного ребенка.

Вот что в моих функций touchesBegan и touchesMoved

if let touch = touches.first { 
    let location = touch.locationInNode(self)    
    let objects = nodesAtPoint(location) as [SKNode] 

    if objects.contains(nodeAtPoint(location)) && nodeAtPoint(location).name == "box" { 
     box.position = location 
     box.removeAllActions() 
     } 
    } 

- box.position = location является то, что изменение потребности.

Надеюсь, вы понимаете мою идею. Я попытался сохранить код в том, что необходимо. Я совершенно новый для Sprite Kit, который вы, вероятно, можете сказать.

+0

Когда вы обнаруживаете, что выбран узел, вам нужно удалить «SKAction», из-за чего узел перемещается вниз по сцене. – 0x141E

ответ

1

Если бы я тебя, я бы обрабатывать так:

Создать собственный класс для коробчатых узлов, простирается SKSpriteNode.

В этом обычном классе переопределить свойство touch.

Затем установите положение внутри этой функции в зависимости от местоположения.

Теперь все, о чем вам нужно беспокоиться, это ваш zPosition, независимо от того, какой ребенок имеет наибольшее значение zPosition, он будет вызван прикосновением.

Вам не нужно беспокоиться о nodesAtPoint или что больше не будет, API будет обрабатывать все это для вас.

+0

Именно то, о чем думал и думал. – Fogmeister

+0

Как я могу это сделать? –

+0

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

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