Sprite kit 将图像指定给SKShapeNode作为球-精灵游戏
我正在尝试在我的Swift 2精灵套件游戏中为我的球添加一个图像。我有一个Sprite kit 将图像指定给SKShapeNode作为球-精灵游戏,sprite-kit,swift2,sprite,skshapenode,Sprite Kit,Swift2,Sprite,Skshapenode,我正在尝试在我的Swift 2精灵套件游戏中为我的球添加一个图像。我有一个make()ball函数,如果没有错误,那么在游戏场景中,当调用该方法时,我会不断收到此错误: “无法将SKShapeNode”指定给类型Ball! 我不知道如何修复,对斯威夫特来说是个新手 // ----- GameScene.Swift ---- class GameScene: SKScene, GameDelegate, SKPhysicsContactDelegate { // ball part one
make()
ball函数,如果没有错误,那么在游戏场景中,当调用该方法时,我会不断收到此错误:
“无法将SKShapeNode”指定给类型Ball!
我不知道如何修复,对斯威夫特来说是个新手
// ----- 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,其中make()
是:
//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
}
}出现此问题是因为您试图将常规初始化和自定义的
SKShapeNode
(由make()
方法生成)分配给与SKShapeNode
类型不同的Ball
类型(使用特定的init子类)
你可以像这样定制你的球类:
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
}
}
var ball: Ball!
ball = Ball(imageNamed:"colorBall.png")
因此,当你在场景中时,你可以这样称呼它:
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
}
}
var ball: Ball!
ball = Ball(imageNamed:"colorBall.png")
谢谢,有了所有这些代码,在我的游戏场景中
ball=ball(imagename:“colorBall.png”)
抛出错误:预期的声明。我做了,我也做了游戏场景,它抛出了预期的声明错误非常奇怪,可能你还有其他问题。如果有用,从这里下载项目更新:我打开了该项目,发现我犯了一个错误,我修复了它,当我运行它时,它会出现在启动屏幕上,然后抛出此错误:致命错误:在展开可选值时意外发现nil,尝试删除!after ball,但这导致了“no initilizers”错误抱歉,我不明白,因为我的项目运行正常,您谈论的是我的项目还是您的项目?您是否声明了var ball:ball?