如何检查精灵节点是否改变位置

时间:2017-10-11 13:30:46

标签: swift sprite-kit

我的精灵节点在屏幕上更改位置。我需要检测精灵何时向上移动,向下移动,向左移动,向右移动。

2 个答案:

答案 0 :(得分:0)

你有两个选择。由于你没有发布任何代码我不能真正建议哪个是最好的:

  1. 如果您已经对SKNode进行了细分,则覆盖frame属性以添加didSet观察者子句:

    覆盖var frame:CGRect {

    didSet {
         // compute the change in the frame’s origin
         let delta : CGPoint = CGPoint(x: frame.origin.x - oldValue.origin.x,
                                                            y: frame.origin.y - oldValue.origin.y)
    
         // etc
     }
    

    }

  2. 请参阅https://developer.apple.com/documentation/spritekit/sknode

    上的SKNode文档
    1. 如果您不想进行子类化,可以使用NSNotificationCenter通过addObserver:selector:name:object:将观察者添加到您的节点。请参阅以下文档:
    2. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html

      我可能会选择选项1.

      希望有所帮助。

答案 1 :(得分:0)

定义变量 oldPosition 并跟踪更新:方法中的精灵位置:

var oldPosition: CGPoint?

override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered

        if Int((oldPosition?.x)!) > Int((sprite?.position.x)!) {
            // sprite moves to the left

        } else if Int((oldPosition?.x)!) < Int((sprite?.position.x)!) {
            // sprite moves to the right

        }

        if Int((oldPosition?.y)!) > Int((sprite?.position.y)!) {
            // sprite moves down

        } else if Int((oldPosition?.y)!) < Int((sprite?.position.y)!) {
            // sprite moves up

        }

        // keep track
        oldPosition = sprite?.position
}

我希望它有所帮助。