如何将多个 SKSpriteNode 松散地保持在一起

Posted

技术标签:

【中文标题】如何将多个 SKSpriteNode 松散地保持在一起【英文标题】:How to keep multiple SKSpriteNode loosely together 【发布时间】:2017-07-29 22:44:38 【问题描述】:

如何确保卡片始终彼此靠近,如下所示?

玩家可以选择一张或多张牌,我需要确保剩余的牌重新合在一起。此外,如果玩家放弃选择(即抽出并释放),他们需要一起回来。

构建这个的最佳方法是什么?

【问题讨论】:

为什么会被否决? 【参考方案1】:

我不知道“最佳方式”,但一种方法是拥有一个占位符节点,当您的卡不在占位符上的 (0,0) 时,将其发回。

示例:

class PlayingCard : SKSpriteNode

   override var position : CGPoint
   
       didSet
       
           if self.position != CGPoint.zero, actionForKey("reset") == nil
           
               self.run(SKAction.moveTo(CGPoint.zero,duration:0.5).withKey:"reset")
           
       
   

使用方法:

class GameScene

    .....
    //however you are setting this up

    let placeHolder = SKNode()
    placeHolder = placeHolderPosition

    let card = PlayingCard()
    placeHolder.addChild(card)
    self.addChild(placeHolder)
    ....

现在请记住,根据您移动卡片的方式,didSet 可能不会被调用,因此您可能必须在更新中执行此操作,或者您可以作弊并在更新中执行以下操作:

func update()

   ...
// do my stuff
  ...
   //maintain an array of all your playing cards
   playingCards.forEach$0.position = $0.position      


【讨论】:

以上是关于如何将多个 SKSpriteNode 松散地保持在一起的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中正确地从父节点中删除SKSpriteNode的子类(要从数组中移除,屏幕上的空格......)?

单个 SKSpriteNode 上的多个碰撞矩形

SKSpriteNode 多个纹理

将任意信息附加到 SKSpriteNode

如何将 SKSpriteNode 合并到 SKTexture 以在 Swift 3 中形成新的 SKSpriteNode?

过滤 SKSpriteNode 的最近邻居和所述节点的大小的困难(swift,spritekit)