首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自自定义类的Swift addChild

来自自定义类的Swift addChild
EN

Stack Overflow用户
提问于 2018-08-02 22:47:45
回答 2查看 266关注 0票数 0

我有个问题。

我创建了GameScene.swift自定义类test.swift,并想从这个类中添加一个sprite到swift

这是我的自定义类

代码语言:javascript
复制
import SpriteKit
import GameplayKit

var scene = GameScene()


class test: SKSpriteNode{


    func test_function(){

        let mysprite = SKSpriteNode(imageNamed: "spark3")
        mysprite.name="sparkle4"
        mysprite.position = CGPoint(x: frame.midX, y: frame.midY)
        mysprite.setScale(8)
        mysprite.zPosition=2
        self.scene?.addChild(mysprite)


}


}

在GameScene中,我使用以下参数调用此函数

代码语言:javascript
复制
var new_class = test()

new_class.test_function()

但是应用程序中没有显示sprite,我看不到任何错误。

如果我直接在GameScene中复制函数,它可以工作。

有人能帮我解决我哪里做错了吗?

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2018-08-02 22:52:37

由于self.scene?在子类中为nil,而它不在GameScene中,因此在将节点作为子节点添加到场景中后,节点将获得分配给它的scene?

代码语言:javascript
复制
self.scene?.addChild(mysprite)

//

所以你可以这样做

代码语言:javascript
复制
let tes = test()
self.scene?.addChild(tes)
tes.test_function()
票数 2
EN

Stack Overflow用户

发布于 2018-08-02 23:06:47

我会像这样重组这个类:

代码语言:javascript
复制
import SpriteKit

class test: SKSpriteNode {
    convenience init(n: String) {
        self.init(imageNamed: n)
        self.name="sparkle4"
        self.setScale(8)
        self.zPosition=2
    }

    override init(texture: SKTexture!, color: UIColor, size: CGSize) {
        super.init(texture: texture, color: color, size: size)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

以便您可以更轻松地创建其他实例。然后在GameScene.swift中,执行:

代码语言:javascript
复制
let mySprite = test(n: "spark3")
mySprite.position = CGPoint(x: frame.midX, y: frame.midY)
self.scene?.addChild(mysprite)

你会得到一个错误,因为你的函数中的scene是空的,因此它不能被添加到任何场景中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51656485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档