我正在为我的所有游戏 Sprite 使用一个协议(protocol),如下所示:
import SpriteKit
protocol GameSprite{
var imageSprite : SKSpriteNode {get set}
func spawn(parentNode: SKNode, position: CGPoint, size:CGSize)
func onTap()
}
我然后使用以下内容创建一个乌鸦 Sprite :
import SpriteKit
class Crow: SKSpriteNode, GameSprite{
var imageSprite = SKSpriteNode(imageNamed: "crow.png")
var flyAnimation = SKAction()
func spawn(parentNode: SKNode, position: CGPoint, size: CGSize = CGSize(width: 40, height: 40)) {
parentNode.addChild(self)
//createAnimations()
self.position = position
self.size = size
//self.runAction(flyAnimation)
}
func onTap() {
}
}
最后我将 Sprite 调用到游戏场景:
let crow2 = Crow()
crow2.spawn(world, position: CGPoint(x: 220, y: 210))
我没有收到错误,但由于某种原因, Sprite 没有显示。
最佳答案
你可以说:
func spawn(parentNode: SKNode, position: CGPoint, size: CGSize = CGSize(width: 40, height: 40)) {
parentNode.addChild(self.imageSprite)
//createAnimations()
self.imageSprite.position = position
self.imageSprite.size = size
//self.runAction(flyAnimation)
}
或者这个
func spawn(parentNode: SKNode, position: CGPoint, size: CGSize = CGSize(width: 40, height: 40)) {
self.texture = SKTexture(image: image)
parentNode.addChild(self)
//createAnimations()
self.position = position
self.size = size
//self.runAction(flyAnimation)
}
这可能更接近您的初衷。 Crow类是SKSpritNode的子类,它实际上并不需要 Sprite 节点属性,因为它本身就是一个 Sprite 节点。如果你希望它成为一个“图像节点”,你只需要用图像对其进行纹理化即可。因此传入一个图像并设置它的纹理属性。
关于ios - SKSpriteNode 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815022/