Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Spritekit-提高速度并保持sprite节点之间的距离不变?_Swift_Sprite Kit - Fatal编程技术网

Swift Spritekit-提高速度并保持sprite节点之间的距离不变?

Swift Spritekit-提高速度并保持sprite节点之间的距离不变?,swift,sprite-kit,Swift,Sprite Kit,我遇到了一个问题,在达到某个分数后,我的站台距离变得混乱。我希望比赛开始时就像接触中的第一部分一样,直到比分达到5分。在分数达到5…10…15等等之后,我希望平台能够以相同的空间加速,无论发生什么。问题是当分数达到5时,平台的速度会加快,但每个繁殖体之间的距离/空间不一样。他们相距更远。有人能帮我吗 希望这不会让任何人困惑,但如果真的让我澄清一下。我只是希望平台在达到某个分数后,在每个繁殖体之间有相同数量的空间来加速。这意味着waitForDuration应该随着速度的增加而加快(小于2.0)

我遇到了一个问题,在达到某个分数后,我的站台距离变得混乱。我希望比赛开始时就像接触中的第一部分一样,直到比分达到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



      }

   }
}
覆盖函数触摸开始(触摸:设置,withEvent事件:UIEvent?){
/*当触摸开始时调用*/
如果gameStarted==false{
gameStarted=true
ball.physicsBody?重力影响=真
title.removeFromParent()
让spawn=SKAction.runBlock({
()在
self.creatingPlatforms()
})
让延迟=SKAction.waitForDuration(2.0)
让spawnDelay=SKAction.sequence([spawn,delay])
让spawnDelayForever=SKAction.repeatActionForever(spawnDelay)
self.runAction(永远)
让距离=CGFloat(self.frame.width+170+officialPlatform.frame.width)
让movePlatforms=SKAction.moveByX(-distance,y:0,duration:NSTimeInterval(0.01*distance))
让RemovePlatform=SKAction.removeFromParent()
moveAndRemove=SKAction.sequence([MovePlatform,RemovePlatform])
ball.physicsBody?速度=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=“\(分数)”
分数=0
self.addChild(scoreLbl)
}
否则{
ball.physicsBody?速度=CGVectorMake(0,0)
球。物理体?。应用脉冲(CGVectorMake(0,45))
ball.physicsBody?恢复=0
scoreNode.physicsBody?.restitution=0
}
}
func creatingPlatforms(){
scoreNode=SKSpriteNode()
scoreNode.size=CGSize(宽:120,高:25)
scoreNode.position=CGPoint(x:self.frame.width+95,y:self.frame.height/2)
scoreNode.physicsBody=SKPhysicsBody(矩形尺寸:scoreNode.size)
scoreNode.physicsBody?.affectedByGravity=false
scoreNode.physicsBody?.dynamic=false
scoreNode.physicsBody?.categoryBitMask=PhysicCategory.score
scoreNode.physicsBody?.collisionBitMask=0
scoreNode.physicsBody?.contactTestBitMask=physicsCategory.ball
scoreNode.name=“scoreNode”
officialPlatform=SKNode()
let platform=SKSpriteNode(图像名为“platform”)
平台尺寸=CGSize(宽:140,高:25)
platform.position=CGPoint(x:self.frame.width+95,y:self.frame.height/2)
platform.physicsBody=SKPhysicsBody(矩形尺寸:platform.size)
platform.physicsBody?.categoryBitMask=physicCategory.platform
platform.physicsBody?.collisionBitMask=physicCategory.ball
platform.physicsBody?.contactTestBitMask=physicCategory.ball
平台.physicsBody?.affectedByGravity=假
platform.physicsBody?.dynamic=false
officialPlatform.name=“官方平台”
officialPlatform.runAction(移动和移动)
officialPlatform.addChild(平台)
officialPlatform.addChild(scoreNode)
self.addChild(官方平台)
}
覆盖函数更新(currentTime:CFTimeInterval){
/*在渲染每个帧之前调用*/

如果分数>=5&&score我在这里的另一个问题中找到了答案。

我在触摸屏中将我的
self.runAction(spawnDelayForever)
更改为
self.runAction(spawnDelayForever,带有键:“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

    }

}

你能把它们都作为子节点添加到一个更大的节点中,然后只移动那个更大的节点吗?@Beaunuvelle我不确定你指的是平台还是其他什么,但正在生成的平台位于一个更大的节点中(让platform=SKSpriteNode)=(officialPlatform=SKNode)。SKNode,officialPlatform,正在运行在TouchsBegind中调用的动作moveAndRemove。问题是如何在每次达到某个分数时更新SKActions和moveAndRemove?