使用图像作为精灵字符
Posted
技术标签:
【中文标题】使用图像作为精灵字符【英文标题】:Using image as sprite character 【发布时间】:2016-07-09 07:38:03 【问题描述】:所以我在我的 swift 2 spritekit 游戏中做一个游戏和一个球。我有一个制作球的功能,在游戏场景中,当该方法被调用时,我一直收到这个错误:“无法将 SKShapeNode 分配给类型球!我不知道如何修复并且是 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 其中 make() 是 //Ball.斯威夫特
//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
【问题讨论】:
this 的副本 【参考方案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
【讨论】:
感谢我调整了代码以反映您的建议,但是程序在启动屏幕上崩溃并且日志抛出此错误:致命错误:在展开可选值时意外发现 nil 首先,当你得到“unexpectedly found nil”时,检查所有强制解包!
。通常,只有当您 100% 确定在那里找不到 nil 时,您才应该使用 !
。检查代码中的所有!
。
我尝试删除 !在 'var ball: Ball!` 中,但是说游戏场景没有初始化程序会中断
在不了解为什么需要它以及为什么使用它的情况下,仅删除 !
是无法解决问题的。以上是关于使用图像作为精灵字符的主要内容,如果未能解决你的问题,请参考以下文章