2016-07-09 7 views
2

Ich versuche ein Bild zu meinem Ball in meinem Swift 2 Sprite-Kit Spiel hinzuzufügen. Ich habe eine make() Ball Funktion und es gibt es keine Fehler gibt es jedoch in der Spielszene, wenn die Methode aufgerufen wird, ich diesen Fehler halten Empfang:Ein Bild einem SKShapeNode als Ball zuweisen - Spritekit Spiel

„Kann nicht zuweisen SKShapeNode‘ Ball zu geben

! ich bin nicht sicher, wie sie zu beheben und bin neu in Swift

// ----- GameScene.Swift ---- 
class GameScene: SKScene, GameDelegate, SKPhysicsContactDelegate { 
    // ball part one 
    var ball: Ball! 
    let ballSpeedX = CGFloat(500) 
} 

override func didMoveToView(view: SKView) { 
    // ball 
    ball = Ball.make() // error!!! 
    ball.position.x = CGRectGetMidX(self.frame) 
    ball.position.y = CGRectGetMidY(self.frame) 
    ball.physicsBody!.categoryBitMask = CollideType.Ball.toMask() 
    ball.physicsBody!.collisionBitMask = CollideType.toMask([.Scene, .Ceil, .Floor]) | boards.usedCollideMasks 
    ball.physicsBody!.contactTestBitMask = CollideType.toMask([.Scene, .Ceil, .Floor]) | boards.usedCollideMasks 
    ball.hidden = true 
    self.addChild(ball) 
} 

und das ist Ball.swift wo die make() ist.

//Ball. Swift 

//imports... 

class Ball: SKShapeNode { 

    var speedXFirst = CGFloat(0) 
var speedXSecond = CGFloat(0) 
var lastFloor = -1 

var xSpeed: CGFloat { 
    get { 
     return speedXFirst + speedXSecond 
    } 
} 

var lastBoardNumber = 0 

private override init() { 
    super.init() 
} 

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

static func make()-> SKShapeNode { 

    let textureBall : SKTexture! = SKTexture(imageNamed:"colorBall.png") 
    let ballSize: CGSize = textureBall.size() 
    var ball = SKShapeNode.init(circleOfRadius: ballSize.width/2) 
    ball.fillTexture = textureBall 
    ball.strokeColor = UIColor.clearColor() 
    ball.name = "ball" 
    ball.zPosition = 1 
    ball.fillColor = UIColor.redColor() // use the color you want 
    return ball 
} 

func freezeX() { 
    self.speedXFirst = 0 
    self.speedXSecond = 0 
} 

}

Antwort

1

Sie haben dieses Problem, weil Sie versuchen, eine regelmäßige zuweisen initialisiert und maßgeschneiderte SKShapeNode (gebaut von Ihrem make()-Methode) auf einen Typ Ball, die nicht die gleiche SKShapeNode Typ (subclassed mit einem bestimmten init) .

Sie könnten Ihre Kugel Klasse wie folgt angepasst:

class Ball: SKShapeNode { 
    var speedXFirst = CGFloat(0) 
    var speedXSecond = CGFloat(0) 
    var lastFloor = -1 
    private var radius: CGFloat! 

    var xSpeed: CGFloat { 
     get { 
      return speedXFirst + speedXSecond 
     } 
    } 
    var lastBoardNumber = 0 

    init(imageNamed: String){ 
     super.init() 
     let textureBall : SKTexture! = SKTexture.init(imageNamed:imageNamed) 
     let ballSize: CGSize = textureBall.size() 
     self.radius = ballSize.width/2 
     self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: radius*2, height: radius*2)), nil) 
     self.strokeColor = UIColor.clearColor() 
     self.name = "ball" 
     self.zPosition = 1 
     self.fillTexture = textureBall 
     self.fillColor = UIColor.redColor() // use the color you want 
    } 
    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    func freezeX() { 
     self.speedXFirst = 0 
     self.speedXSecond = 0 
    } 
} 

Also, wenn Sie in der Szene sind, können Sie es so nennen:

var ball: Ball! 
ball = Ball(imageNamed:"colorBall.png") 
+0

Dank, mit all diesen Code, in meiner Spielszene 'ball = Ball (imageNamed:" colorBall.png ")' wirft Fehler: Erwartete Deklaration. –

+0

Ändern Sie Ihre ball.swift mit meinem Code in Antwort –

+0

ich tat, ich habe auch die Gamescene und es wirft die erwartete Deklaration Fehler –

Verwandte Themen