2016-07-09 13 views
0

Also ich arbeite an einem Spiel und mit einem Ball in meinem schnellen 2 spritekit Spiel. Ich habe eine Make-Ball-Funktion und in der Spielszene, wenn die Methode aufgerufen wird, erhalte ich weiterhin diesen Fehler: "Kann SKShapeNode nicht zuweisen, um Ball zu tippen! Ich bin mir nicht sicher, wie zu beheben und bin neu zu schnell. Danke!Verwenden von Bild als Sprite-Zeichen

// ----- 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) 
} 

Dann ist dieser ball.swift ist, wo die Marke() ist // Kugel. 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 
} 
} 
+0

Duplizieren von [dieser] (http://stackoverflow.com/questions/38278089/assigning-an-image-to-a-skshapenode-as-a-ball-spritekit-game) –

Antwort

1

ball = Ball.make() erfolgreich ausführen zu können, muss der Rückgabetyp make() Methode Ball sein, nicht SKSpriteNode.

Und zurückkommen ein Wert von Ball von Ihrem make(), müssen Sie eine Instanz von Ball erstellen, nicht SKSpriteNode.

static func make() -> Ball { //the return type of `make()` method needs to be `Ball` 

    let textureBall : SKTexture! = SKTexture(imageNamed:"colorBall.png") 
    let ballSize: CGSize = textureBall.size() 
    let ball = Ball(circleOfRadius: ballSize.width/2) //you need to create an instance of `Ball` 
    ball.fillTexture = textureBall 
    ball.strokeColor = UIColor.clearColor() 
    ball.name = "ball" 
    ball.zPosition = 1 
    ball.fillColor = UIColor.redColor() 
    return ball 
} 
+0

Dank eingestellt I der Code, um Ihren Rat widerzuspiegeln, aber das Programm stürzt auf dem Startbildschirm ab und das Protokoll löst diesen Fehler aus: Schwerwiegender Fehler: Unerwartetes gefunden nil beim Entpacken eines optionalen Werts – SwiftNewb

+0

Überprüfen Sie zuerst alle erzwungenen Entpackungen '!', wenn Sie "unerwartet Nil gefunden" erhalten. Im Allgemeinen sollten Sie '!' Nicht verwenden, wenn Sie sich zu 100% sicher sind, dass nil dort nicht gefunden wird. Überprüfen Sie alle '!' In Ihrem Code. – OOPer

+0

Ich habe versucht, die zu entfernen! in 'var ball: Ball! 'aber es bricht und sagt Gamescene hat keine Initialisierer – SwiftNewb