我使用Swift 4和XCode编写了一个简单的游戏,并且我已经编写了GameScene中的所有内容。我的所有元素(怪物,玩家,射弹等)都在GameScene中编码。
我想将我的代码转移到专用类(Class Player,class monster等)
我想知道SKSpriteNode类的基本结构以及GameScene中该类的调用,以便更有效地调整我的代码。
以下是我尝试过的一个例子:
class Vaisseau: SKSpriteNode /*: Creatures */{
var coeur: Int = 0
init(texture: SKTexture, size: CGSize)
{
let texture = SKTexture(imageNamed: "player")
super.init(texture: texture, color: UIColor.clear, size: texture.size())
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
GameScene中的初始化:
let player = Vaisseau()
以下是GameScene中实际定义的方式:
let player = SKSpriteNode(imageNamed: "player")
答案 0 :(得分:0)
您声明您的init有两个参数(texture: SKTexture, size: CGSize)
,但您没有在初始化调用中传递参数
let player = Vaisseau()
您需要将初始化更改为...
let texture = SKTexture(imageNamed: "player")
let player = Vaisseau(texture: texture, size: texture.size())
并将init更改为
init(texture: SKTexture, size: CGSize) {
super.init(texture: texture, color: UIColor.clear, size: size)
}
或者将类中的init更改为...
init() {
let texture = SKTexture(imageNamed: "player")
super.init(texture: texture, color: UIColor.clear, size: texture.size())
}
并将初始化调用保留为...
let player = Vaisseau()
player.position = CGPoint(x: 500, y: 500)
addChild(player)
EDIT添加了以上2行,向您展示那些需要在场景中 但其他项目,如alpha,zPosition,actions,zRotation等可以在类
中
你需要问自己要弄清楚使用哪一个"玩家的纹理会不同?"如果是这样,你可能想要考虑传递纹理的第一个选项。