Swift 如何在SpriteKit中重置物理体的对齐?
我用SpriteKit做了一个游戏,不同的砖块掉落在山上。当这些物质体坠落时,它们通常会从山上反弹并改变它们的排列方式(它们会旋转几次)。如果我切换到GameOver场景并按replay(返回到游戏场景),物理实体仍然像我离开场景时一样对齐。但我想让它们像一开始那样水平排列 游戏场景: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
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
}
希望这对你有所帮助你是如何在场景之间转换的,我有两个答案可以给你,但我需要先知道你在做什么。我更新了我的问题@达贡骑士不,你怎么重演你是说我怎么回到游戏场景@骑士们这是你的问题,不是吗?