繁体   English   中英

Spritekit-提高速度并在Sprite节点之间保持相同的距离?

[英]Spritekit - Increasing speed and keeping the same distance between sprite nodes?

我遇到一个问题,在达到一定分数后,我的平台距离变得混乱了。 我希望游戏像touchesBegan中的spawnDelayForever部分一样开始,直到得分达到5。得分达到5…10…15等,我希望平台能够以相同的空间加速每次生成之间都无所谓。 问题是,当分数达到5时,平台速度加快,但每个生成之间的距离/空间不相同。 他们是分开的。 有谁能够帮助我?

希望这不会让任何人感到困惑,但是如果确实让我澄清一下。 我只希望平台在达到一定的分数之后加速,并且每次生成之间的空间相同。 这意味着waitForDuration应该随着每次速度的增加而加速(小于2.0)。

我的部分代码:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */

    if gameStarted == false {

        gameStarted = true

        ball.physicsBody?.affectedByGravity = true

        title.removeFromParent()

        let spawn = SKAction.runBlock({

            ()in

            self.creatingPlatforms()


        })

        let delay = SKAction.waitForDuration(2.0)
        let spawnDelay = SKAction.sequence([spawn, delay])
        let spawnDelayForever = SKAction.repeatActionForever(spawnDelay)
        self.runAction(spawnDelayForever)

        let distance = CGFloat(self.frame.width + 170 + officialPlatform.frame.width)
        let movePlatforms = SKAction.moveByX(-distance, y: 0, duration: NSTimeInterval(0.01 * distance))
        let removePlatforms = SKAction.removeFromParent()
        moveAndRemove = SKAction.sequence([movePlatforms, removePlatforms])


        ball.physicsBody?.velocity = CGVectorMake(0, 0)
        ball.physicsBody?.applyImpulse(CGVectorMake(0, 0))

        scoreLbl.fontSize = 35
        scoreLbl.position = CGPoint(x: self.frame.width / 2, y: scene!.frame.height / 2 + 300)
        scoreLbl.fontColor = UIColor.blackColor()
        scoreLbl.text = "\(score)"
        score = 0
        self.addChild(scoreLbl)



    }

    else {

        ball.physicsBody?.velocity = CGVectorMake(0, 0)
        ball.physicsBody?.applyImpulse(CGVectorMake(0, 45))

        ball.physicsBody?.restitution = 0
        scoreNode.physicsBody?.restitution = 0

    }
}





func creatingPlatforms() {

    scoreNode = SKSpriteNode()

    scoreNode.size = CGSize(width: 120, height: 25)
    scoreNode.position = CGPoint(x: self.frame.width + 95, y: self.frame.height / 2)
    scoreNode.physicsBody = SKPhysicsBody(rectangleOfSize: scoreNode.size)
    scoreNode.physicsBody?.affectedByGravity = false
    scoreNode.physicsBody?.dynamic = false
    scoreNode.physicsBody?.categoryBitMask = physicsCategory.score
    scoreNode.physicsBody?.collisionBitMask = 0
    scoreNode.physicsBody?.contactTestBitMask = physicsCategory.ball
    scoreNode.name = "scoreNode"

    officialPlatform = SKNode()

    let platform = SKSpriteNode(imageNamed: "platform")

    platform.size = CGSize(width: 140, height: 25)
    platform.position = CGPoint(x: self.frame.width + 95, y: self.frame.height / 2)
    platform.physicsBody = SKPhysicsBody(rectangleOfSize: platform.size)
    platform.physicsBody?.categoryBitMask = physicsCategory.platform
    platform.physicsBody?.collisionBitMask = physicsCategory.ball
    platform.physicsBody?.contactTestBitMask = physicsCategory.ball
    platform.physicsBody?.affectedByGravity = false
    platform.physicsBody?.dynamic = false

    officialPlatform.name = "official platform"

    officialPlatform.runAction(moveAndRemove)

    officialPlatform.addChild(platform)
    officialPlatform.addChild(scoreNode)

    self.addChild(officialPlatform)




}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    if score >= 5 && score <= 9 {

        moveAndRemove.speed = 0.9



      }

   }
}

我在这里的另一个问题中找到了答案。 快速-随着时间的推移增加物体的速度

我将touchesBegan中的self.runAction(spawnDelayForever)更改为self.runAction(spawnDelayForever, withKey: "spawnDelayForever") 然后在更新功能中,我将其更改为:

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    if score > 0  {

        self.actionForKey("spawnDelayForever")?.speed += 0.001
        moveAndRemove.speed += 0.001

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM