SpriteKit - 当触摸在精灵上移动但实际上并没有在精灵上开始时,我如何捕捉事件

SpriteKit - How can I catch the event when the touch moves over a sprite, but didn't actually begin on the sprite

在 SpriteKit 中,我想在触摸移过精灵时捕捉事件,但实际上并没有在这个精灵上开始,而是在另一块 SKScene 上。

我可以在 SKSpriteNode A 中捕获 touchesBegan,如果触摸从它开始然后拖到它上面,但是当触摸从另一个节点 - B - 开始然后拖到我的节点 - A 上时就不行了。任何人都知道如何捕捉这个,因为我觉得我在这里做错了。

谢谢@Christian W。但我现在有一个更简单的解决方案,虽然这不是我真正想要的: 只需将它放在 Scene 中并捕获其中的 touchesMoved,其中包含以下代码:

SKNode * draggedOverNode = [self nodeAtPoint:location];
[draggedOverNode touchesMoved:touches withEvent:event];

并在实际扩展 SKNode 的对象中实现 touchesMoved 函数(您的大多数 类 都会这样做)。

试试这个: 抱歉,这是 swift.. 但您可以在 obj c

中轻松地做同样的事情
import SpriteKit

class GameScene: SKScene {

    let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(100, 100))
    var startedOutsideSprite = true

    override init(size: CGSize) {
        super.init(size: size)
        sprite.position = CGPointMake(size.width/2, size.height/2)
        addChild(sprite)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            let location = touch.locationInNode(self)
            if !sprite.containsPoint(location) {
                startedOutsideSprite = true
            }
        }
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            let location = touch.locationInNode(self)

            if sprite.containsPoint(location) && startedOutsideSprite {
                print("yayyy")
                // your code here
            }
        }
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        startedOutsideSprite = false
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}