SKSpriteNode заменить на SKTexture - PullRequest
       102

SKSpriteNode заменить на SKTexture

0 голосов
/ 09 октября 2018

Моя проблема в том, что когда я играю в свою игру, я теряю жизнь, даже если враг не касается моего персонажа, а летит очень близко к нему.Я понимаю, что проблема в том, что прозрачное пространство моего персонажа соприкасается с прозрачным пространством противника.

Я хочу сделать это, как рекомендовано в документации SKPhysicsBody .Как я могу реализовать это, используя мой текущий код?

func madEnemy() {

    let randomNumber = Int.random(in: 1..<6)

    let enemy = SKSpriteNode(imageNamed: "enemy\(randomNumber)")

    enemy.position = CGPoint(
        x: cameraRect.maxX + enemy.size.width/2,
        y: CGFloat.random(
            min: cameraRect.minY + enemy.size.height/2,
            max: cameraRect.maxY - enemy.size.height/2))
    enemy.zPosition = 50
    enemy.name = "enemy"
    addChild(enemy)

    let actionMove =
        SKAction.moveBy(x: -(size.width + enemy.size.width), y: 0, duration: 2.0)
    let actionRemove = SKAction.removeFromParent()
    enemy.run(SKAction.sequence([actionMove, actionRemove]))
}

1 Ответ

0 голосов
/ 09 октября 2018

Вам просто нужно сначала создать SKTexture объект из вашего изображения, затем создать SKSpriteNode, используя эту текстуру, чтобы использовать текстуру для определения размера SKPhysicsBody или вашего узла.

func madEnemy() {

    let randomNumber = Int.random(in: 1..<6)

    let enemyTexture = SKTexture(imageNamed: "enemy\(randomNumber)")
    let enemy = SKSpriteNode(texture: enemyTexture)
    enemy.physicsBody = SKPhysicsBody(texture: enemyTexture, size: CGSize(width: enemy.size.width, height: enemy.size.height))

    enemy.position = CGPoint(
        x: cameraRect.maxX + enemy.size.width/2,
        y: CGFloat.random(
            min: cameraRect.minY + enemy.size.height/2,
            max: cameraRect.maxY - enemy.size.height/2))
    enemy.zPosition = 50
    enemy.name = "enemy"
    addChild(enemy)

    let actionMove =
        SKAction.moveBy(x: -(size.width + enemy.size.width), y: 0, duration: 2.0)
    let actionRemove = SKAction.removeFromParent()
    enemy.run(SKAction.sequence([actionMove, actionRemove]))
}
...