2016-07-09 49 views
0

所以即时通讯工具在我的swift 2 spritekit游戏中有一个游戏和一个球。我有一个make ball函数,在游戏场景中,当调用方法时,我不断收到这个错误:“不能指定SKShapeNode”来键入Ball!我不知道如何修复,并且对于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) 
} 

那么这就是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 
} 
} 
+0

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

回答

1

要成功执行ball = Ball.make()make()方法的返回类型必须Ball,不SKSpriteNode

并返回您的make()的值为Ball,则需要创建Ball的实例,而不是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

感谢我调整的重复代码来反映你的建议,然而程序崩溃在启动屏幕上和日志引发此错误:致命错误:意外地发现零,同时展开一个可选值 – SwiftNewb

+0

首先,检查所有强制解包'!',当你得到“意外发现无”。一般来说,只有当你100%确定没有在那里找到零时,你才应该使用'!'。检查代码中的所有'!'。 – OOPer

+0

我试过去掉了!在'var ball:Ball!'中,但它断言游戏没有启动器 – SwiftNewb