【问题标题】:Track the position of SKSpriteNode while doing a SKAction moveTo在执行 SKAction moveTo 时跟踪 SKSpriteNode 的位置
【发布时间】:2016-10-28 19:20:58
【问题描述】:

节点只是沿 x 轴移动,我希望能够生成从 0 到球的 postion.x 的随机数,并在到达位置时改变颜色

override func update(currentTime: CFTimeInterval)

我尝试在更新方法中进行更改,但是一旦出现新节点,我就忘记了之前的一个

我也试过了

        let changecolor = SKAction.runBlock{
        let wait = SKAction.waitForDuration(2, withRange: 6)
        let changecoloratpoint = SKAction.runBlock { self.changecolorfunc(self.ball)}
        let sequence1 = SKAction.sequence([wait, changecoloratpoint])
        self.runAction(SKAction.repeatAction(sequence1, count: 3))
    }

但它不能让我控制随机位置

【问题讨论】:

    标签: ios swift sprite-kit skspritenode skaction


    【解决方案1】:

    您已经拥有了所需的一切。

    假设您的节点有一个参考:

    var sprite1: SKSpriteNode!
    

    并且您想将其生成到随机位置(示例方法..):

    self.spawnToRandomPos(sprite1)
    

    假设你想moveTo你的 sprite1:

    self.sprite1.runAction( SKAction.moveToY(height, duration: 0))
    

    每次查看他的位置,你就知道它在哪里:

    print(sprite1.position)
    

    所以要始终知道您的 sprite1 位置,您可以执行此代码并查看它的所有动作:

    override func update(currentTime: CFTimeInterval) {
        print(sprite1.position)
    }
    

    附注:

    如果您没有关于生成的对象的引用,您还可以为通用对象命名,例如,一个单词后跟一个计数器(这只是一个示例):

    for i in 0..<10 {
       var spriteTexture = SKTexture(imageNamed: "sprite.png")
       let sprite = SKSpriteNode(texture: spriteTexture, size: spriteTexture.size)
       sprite.name = "sprite\(i)"
       self.addChild(sprite)
    }
    

    在此之后检索/重新获取您的精灵:

     let sprite1 = self.childNodeWithName("sprite1")
    

    【讨论】:

    • 唯一的问题是,它不仅仅是一个精灵,而是无穷无尽的精灵
    • 没有问题,如果你的对象有一个像 spritex.name = "sprite1" 这样的名字添加到 self 像 self.addChild(sprite1) 你可以搜索 let sprite1 = self.childNodeWithName("sprite1" ) 然后你重新获得你的对象
    • 我已经更新了我的答案,看看它是否可以帮助你。
    • 实际上它确实有帮助,我正在考虑一种使用您的答案的方法,当我找到解决方案时我会更新
    • 我在这里,如果您需要问我或者如果您需要更复杂的答案,请提出另一个问题并给我链接,以便我可以帮助您。
    【解决方案2】:

    可能有一百种不同的方法可以做到这一点。以下是我的做法。

    在你的更新函数中

    checkForCollisions()
    

    这只会滚动浏览您随机生成的“障碍物”,并放置您希望颜色触发发生的任何人。它们可以是您想要的任何东西,只需更改名称以匹配即可。如果它们与您的“球”重叠,那么您可以为其中一个着色。

    func checkForCollisions() {
    
        self.enumerateChildNodesWithName("obstacles") { node, stop in
    
            if let obstacle: Obstacle = node as? Obstacle {
    
                if self.ball.intersectsNode(obstacle) {
    
                    //color node or ball whichever you want
                }
            }
        }
    }
    

    【讨论】:

    • 我会在几分钟内试一试,但球的方式没有障碍物,它们向左或向右,不接触任何东西
    • 障碍只是我用作占位符的东西。您没有提供足够的信息来使用与您相关的代码。您说“nodes”,但没有显示“nodes”的任何代码,您说“self.ball”,但没有显示“self.ball”的任何代码。任何想帮助你的人都必须猜测或只使用通用代码。
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多