【问题标题】:Drag and drop children of the same sprite拖放同一个精灵的孩子
【发布时间】:2015-12-31 15:15:38
【问题描述】:

我正在使用 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 很陌生,你可能知道。

【问题讨论】:

  • 当您检测到某个节点被选中时,您需要删除使该节点向下移动的SKAction

标签: swift sprite-kit


【解决方案1】:

如果我是你,我会这样处理:

为扩展 SKSpriteNode 的框节点创建自定义类。

在这个自定义类中,覆盖 touch 属性。

然后根据位置在这个函数内部设置位置。

现在您只需要担心您的zPosition,任何具有最高 zPosition 的孩子都会在触摸时被调用。

您无需担心nodesAtPoint 或其他问题,API 将为您处理所有这些。

【讨论】:

  • k 也是这么想的。
  • 我该怎么做?
  • 通常我不介意在涉及复杂问题时提供代码,但在这种情况下,我不会这样做,因为我已经解释了你需要做的基本原则,它是更好地研究和了解正在发生的事情,而不仅仅是复制和粘贴。我已按原样将答案分解为多个步骤,因此通过我的答案应该不难。
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多