如何在Swift3中没有完全实例化的情况下引用SKSpriteNode?

时间:2016-09-15 18:05:15

标签: swift sprite-kit swift3

以前,我一直在我的一个SKSpriteNode子类中使用var progressBar = ProgressBar?()上方的init,以允许各种方法在整个类中引用progressBar,如下所示:

class Ship:SKSpriteNode{

    var progressBar = ProgressBar?()

    static var shipState = "norm"
    var powerupOn = false
    var moveSpeed:CGFloat
    var lives:Int
    var canShoot = false

    let las = SKSpriteNode(texture:laserTexture)

    var gun:GenericGun = GenericGun()
    let scaleFactor:CGFloat = 0.07

    init(startPosition startPos:CGPoint, controllerVector:CGVector){

        self.lives = 3
        self.moveSpeed = 160

        super.init(texture: ship0, color: UIColor.clear, size: ship0.size())

        //Set position
        self.position = startPos

        attachGun(gun)
        self.setScale(scaleFactor)


        self.physicsBody = SKPhysicsBody(texture: self.texture!, size: self.size)

        self.physicsBody?.isDynamic = true
        self.physicsBody?.categoryBitMask = PhysicsCategory.Ship
        self.physicsBody?.collisionBitMask = 0
        self.physicsBody?.contactTestBitMask = PhysicsCategory.Alien
        self.physicsBody?.allowsRotation = false
        self.physicsBody?.angularVelocity = CGFloat(0)
        self.physicsBody?.usesPreciseCollisionDetection = true
        self.physicsBody?.affectedByGravity = false //TBD

        self.physicsBody?.velocity.dx = controllerVector.dx * moveSpeed
        self.physicsBody?.velocity.dy = controllerVector.dy * moveSpeed

        self.name = "ship"

        //Call animations
        self.animateShip1()
    }

    func updateVelocity(_ v:CGVector){
        self.physicsBody?.velocity.dx = v.dx * moveSpeed
        self.physicsBody?.velocity.dy = v.dy * moveSpeed
    }

    func attachGun(_ gun:GenericGun){
        gun.position = CGPoint(x: 0, y: 0)
        self.addChild(gun)
    }

    func animateShip1() {
        let animate = SKAction.animate(with: shipFrames, timePerFrame: 0.1)
        let forever = SKAction.repeatForever(animate)
        self.run(forever)
    }

    func updateShipProperties(shipVelocity v:CGVector,laserStartPos laserStart:CGPoint){
        updateVelocity(v)

        progressBar?.position = CGPoint(x: self.position.x - (self.size.width/2 + self.size.width/7.0), y: self.position.y)
    }


    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

在Swift3中,我遇到了需要提供完整参数的错误,有没有办法在Swift3中实现相同的功能?

0 个答案:

没有答案