определить спрайт из двух точек (cgpoint) набор спрайтов - быстрый

Я делаю игру в SpriteKit. У меня огромная проблема, я не могу найти в Интернете и даже на веб-сайте Apple способ найти узел между двумя местоположениями (CGPoint). В методе UiSwipeGesture вы не можете найти Swipe в любом направлении, а только влево, вправо, вверх, вниз.

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

Кто-нибудь может мне помочь? Спасибо

Код здесь:

var locationBegan : CGPoint = CGPoint()
var locationEnded : CGPoint = CGPoint()
var objectbegan : SKNode = SKNode()    

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches 
    {
        let location: CGPoint! = touch.locationInNode(self)
        self.locationBegan = location
        var nodeAtPoint : SKNode = self.nodeAtPoint(location)
        self.objectbegan = nodeAtPoint

    }
}

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    for touch: AnyObject in touches {
        let location: CGPoint! = touch.locationInNode(self)
        self.locationEnded = location
        var nodeAtPoint : SKNode = self.nodeAtPoint(location)

        var finalDestination : CGPoint = GetFinalDestination(location, nodeAtPoint: self.objectbegan)
        nodeAtPoint.runAction(SKAction.moveTo(finalDestination, duration: 1))

    }
}

как найти узел между locationBegan и locationEnded? Спасибо

Если это невозможно, не могли бы вы посоветовать мне способ найти узел при свайпе во всех направлениях, а не только влево, вправо, вверх и вниз? Спасибо

ОБНОВЛЕНИЕ Задайте следующие свойства узла для запуска:

node.physicsBody = SKPhysicsBody(circleOfRadius: 5)
node.physicsBody?.dynamic = false

person Mr. Developer    schedule 07.10.2014    source источник


Ответы (1)


Вы должны установить SKPhysicsBody для узлов, которые хотите найти, но как только вы это сделаете, вы можете использовать bodyAlongRayStart:end:.

bodyAlongRayStart возвращает SKPhysicsBody?, поэтому вам придется развернуть его, чтобы использовать. Если затем вам понадобится SKNode, используйте свойство node SKPhysicsBody (которое возвращает SKNode?, поэтому вам также нужно будет развернуть его). Используйте свойство physicsWorld вашего SKScene для вызова bodyAlongRayStart. Если вы объедините вызов этой функции и необязательные привязки, это будет выглядеть примерно так:

if let physicsBody = scene.physicsWorld.bodyAlongRayStart(locationBegan, end: locationEnded) {
    if let node = physicsBody.node {
        /* do something with node here */
    }
}

Если вы ожидаете, что в этой строке будет более одного SKNode (что, вероятно, так и есть), вы должны использовать enumerateBodiesAlongRayStart:end:usingBlock: вместо этого:

scene.physicsWorld.enumerateBodiesAlongRayStart(locationBegan, end: locationEnded) {
    (physicsBody, point, normal, stop) in
    if let node = physicsBody.node {
        /* do something with node */
    }
}
person Mike S    schedule 07.10.2014
comment
Единственные 3 возможности, о которых я могу думать, это: 1. У вас нет набора physicsBody на вашем узле; 2. physicsBody узла смещено от того места, где вы видите узел в своем представлении (на самом деле это довольно распространено); 3. Луч от locationBegan до locationEnded действительно ничего не пересекает. Чтобы проверить это, вы можете установить showPhysics вашего свойства от SKView до true, чтобы вы могли видеть, где находятся physicsBody. - person Mike S; 08.10.2014
comment
Очень-очень спасибо, проблема в физике тела на узле.! В настоящее время работает - person Mr. Developer; 08.10.2014
comment
И последний вопрос: я должен произвести расчеты на основе узла, который я выбрал с помощью слайда, и местоположения последнего касания (locationEnded). Моя проблема в том, что, будучи новичком, я еще не могу полностью двигаться, поэтому я хотел бы знать, как я могу установить мир nodo.physics, который я нашел в SKNode. узел var = self.scene ? .physicsWorld.bodyAlongRayStart (locationBegan, end: location) var nodeNow: SKNode = node? .node но у меня не работает и выдает ошибку, требует поставить и снять ! в конце строки. Спасибо - person Mr. Developer; 08.10.2014
comment
Хорошо, я отредактировал свой ответ, чтобы уточнить, как получить и использовать узел из файла SKPhysicsBody. - person Mike S; 08.10.2014