Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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中重置物理体的对齐?_Swift_Sprite Kit_Skphysicsbody_Gameplay Kit - Fatal编程技术网

Swift 如何在SpriteKit中重置物理体的对齐?

Swift 如何在SpriteKit中重置物理体的对齐?,swift,sprite-kit,skphysicsbody,gameplay-kit,Swift,Sprite Kit,Skphysicsbody,Gameplay Kit,我用SpriteKit做了一个游戏,不同的砖块掉落在山上。当这些物质体坠落时,它们通常会从山上反弹并改变它们的排列方式(它们会旋转几次)。如果我切换到GameOver场景并按replay(返回到游戏场景),物理实体仍然像我离开场景时一样对齐。但我想让它们像一开始那样水平排列 游戏场景: import SpriteKit import GameplayKit let hillTexture = SKTexture(imageNamed: "HillIllustration") let hil

我用SpriteKit做了一个游戏,不同的砖块掉落在山上。当这些物质体坠落时,它们通常会从山上反弹并改变它们的排列方式(它们会旋转几次)。如果我切换到GameOver场景并按replay(返回到游戏场景),物理实体仍然像我离开场景时一样对齐。但我想让它们像一开始那样水平排列

游戏场景:

import SpriteKit
import GameplayKit

 let hillTexture = SKTexture(imageNamed: "HillIllustration")
 let hillIllustration = SKSpriteNode(texture: hillTexture)

 let brickTexture = SKTexture(imageNamed: "BrickIllustration")
 let brick = SKSpriteNode(texture: brickTexture)

 class GameScene: SKScene {

    //Hill

    hillIllustration.setScale(0.7)
    hillIllustration.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.16)
    hillIllustration.zPosition = 2
    hillIllustration.physicsBody = SKPhysicsBody(polygonFrom: clipPath)
    hillIllustration.physicsBody?.isDynamic = false
    hillIllustration.physicsBody?.categoryBitMask = CollisionBitMask.Hill
    hillIllustration.physicsBody?.affectedByGravity = false
    self.addChild(hillIllustration)

    //The brick is a child of the hill node

    brick.setScale(1)
    brick.position = CGPoint(x: -350, y: self.size.height * 0.5)
    brick.zPosition = 1
    brick.physicsBody = SKPhysicsBody(polygonFrom: clipPath2)
    brick.physicsBody?.isDynamic = true
    brick.physicsBody?.categoryBitMask = CollisionBitMask.Brick
    brick.physicsBody?.affectedByGravity = true
    hillIllustration.addChild(brick)

}
let transition = SKTransition.crossFade(withDuration: 0)
    let gameScene = GameScene(size: self.size)
    self.view?.presentScene(gameScene, transition: transition)
过渡到GameOver:

let transition = SKTransition.crossFade(withDuration: 0)
let gameScene = GameOver(size: self.size)
self.view?.presentScene(gameScene, transition: transition)
切换回游戏场景:

import SpriteKit
import GameplayKit

 let hillTexture = SKTexture(imageNamed: "HillIllustration")
 let hillIllustration = SKSpriteNode(texture: hillTexture)

 let brickTexture = SKTexture(imageNamed: "BrickIllustration")
 let brick = SKSpriteNode(texture: brickTexture)

 class GameScene: SKScene {

    //Hill

    hillIllustration.setScale(0.7)
    hillIllustration.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.16)
    hillIllustration.zPosition = 2
    hillIllustration.physicsBody = SKPhysicsBody(polygonFrom: clipPath)
    hillIllustration.physicsBody?.isDynamic = false
    hillIllustration.physicsBody?.categoryBitMask = CollisionBitMask.Hill
    hillIllustration.physicsBody?.affectedByGravity = false
    self.addChild(hillIllustration)

    //The brick is a child of the hill node

    brick.setScale(1)
    brick.position = CGPoint(x: -350, y: self.size.height * 0.5)
    brick.zPosition = 1
    brick.physicsBody = SKPhysicsBody(polygonFrom: clipPath2)
    brick.physicsBody?.isDynamic = true
    brick.physicsBody?.categoryBitMask = CollisionBitMask.Brick
    brick.physicsBody?.affectedByGravity = true
    hillIllustration.addChild(brick)

}
let transition = SKTransition.crossFade(withDuration: 0)
    let gameScene = GameScene(size: self.size)
    self.view?.presentScene(gameScene, transition: transition)

不知怎的,当我转换场景时,砖块如何对齐的信息被保存了下来。我该如何更改呢?

如果您希望在重新启动游戏后,砖块节点返回开始旋转,然后调用:

brick.zRotation = 0
如果您希望在游戏期间节点不旋转,您可以将此代码放入所有spritekit文件中已有的更新函数中:

override func update(_ currentTime: TimeInterval) {
 brick.zRotation = 0
}

希望这对你有所帮助

你是如何在场景之间转换的,我有两个答案可以给你,但我需要先知道你在做什么。我更新了我的问题@达贡骑士不,你怎么重演你是说我怎么回到游戏场景@骑士们这是你的问题,不是吗?