Как сбросить выравнивание физических тел в SpriteKit? - PullRequest
0 голосов
/ 10 июня 2018

Я сделал игру со SpriteKit, в которой различные кирпичи падают на холм.Когда эти физические тела падают, они обычно отскакивают от холма и меняют свое положение (они вращаются пару раз).Если я перехожу на сцену GameOver и нажимаю кнопку воспроизведения (обратно в GameScene), физические тела все еще выровнены, как когда я покинул сцену.Но я хочу, чтобы они имели горизонтальное выравнивание, как в начале.

GameScene:

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)

}

Переход к GameOver:

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

Переход обратно к GameScene:

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

Каким-то образом при переходе сцен сохраняется информация о выравнивании кирпичей.Как я могу это изменить?

1 Ответ

0 голосов
/ 13 июня 2018

, если вы хотите, чтобы после перезапуска игры узел кирпича вернулся, чтобы начать вращение, а затем вызовите:

brick.zRotation = 0

, если вы хотите, чтобы во время игры узел не вращался, чем вы можете поместить этот кодв функции обновления, которая уже есть во всех файлах spritekit:

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

Надеюсь, это поможет

...