从.sks文件使用自定义初始化程序进行子类化

Abdou023

我有一个自定义类,并在.sks文件中创建了一个节点,希望使用自定义初始化程序作为该自定义类的实例。

自定义类:

Class Enemy: SKSPritenode {
    init(name: String, image: String, health: Int) {
      // stuff here
    }
}

SKScene:

 // error at runtime:
var enemy1 = childNodeWithName("Enemy1") as! Enemy  

 // error: 
var enemy1 = childNodeWithName("Enemy1") as! Enemy(name: "enemy1, image: "enemy1", health: 100) 

有没有办法将自定义初始化程序与.sks文件一起使用?

卢卡·安格莱蒂(Luca Angeletti)

将您的自定义类与节点相关联

如果要将在SKS文件中创建的节点与自定义类相关联,则需要:

  1. 在您的SKS文件中添加一个空节点
  2. 选择节点
  3. 在Xcode中打开自定义类检查器
  4. 在[自订课程]栏位中输入课程名称
  5. 在模块字段中输入项目的名称

在此处输入图片说明

使用正确的初始化器

当SpriteKit确实加载SKS文件并开始构建对象以填充场景时,它不会调用您的自定义初始化程序,而是

required init?(coder aDecoder: NSCoder)

所以应该这样定义您的敌人类别

class Enemy: SKSpriteNode {
    let health: Int

    required init?(coder aDecoder: NSCoder) {
        self.health = 10

        let texture = SKTexture(imageNamed: "Spaceship")
        super.init(texture: texture, color: .clearColor(), size: texture.size())
    }
}

测试

现在,您可以测试场景中是否有真正的敌人对象,并在GameScene中定义此方法

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let enemy = (children.filter { $0 is Enemy }).first else { fatalError("No Enemy found") }
    print(enemy)
}

使用您的自定义初始化程序

现在,无法将参数从SKS文件传递到您的自定义初始化程序。

但是,这种技术已在CocosBuilder中可用,CocosBuilder是可用于Cocos2d的旧游戏级别编辑器,因此,我相信将来某个时候我们将能够将参数从SKS文件传递到我们的自定义类。

也许这将在WWDC 2016的几天内与SpriteKit的下一版本一起宣布。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UILabel子类使用自定义颜色初始化

使用初始化程序的Python子类化过程

自定义类型需要使用auto进行初始化的初始化程序吗?

使用@Namespace进行.matchedGeometryEffect的自定义初始化

如何在Swift中为UIViewController子类创建自定义初始化程序?

如何对没有指定初始化程序的类进行子类化?

使用自定义初始化程序的Swift枚举会丢失rawValue初始化程序

自定义UIView是使用init(coder)初始化的,如何使用init(frame)对其进行初始化

Swift:自定义ViewController初始化程序

在 SKSpriteNode 自定义子类的初始化程序中设置物理主体不起作用

如何在keras自定义正则化程序中使用初始化的图层权重?

使用Python进行Hive转换:无法初始化自定义脚本

如何使用进行错误检查的自定义设置器初始化属性?

致命错误:在自定义NavigationController中使用未实现的初始化程序

如何在UITableViewCell上使用自定义初始化程序?

如何在UICollectionViewCompositionalLayout中使用UICollectionViewController的自定义初始化程序?

无法使用自定义数据库初始化程序

自定义初始化程序应使用哪种类型的参数?

WorkManager-当我们同时使用默认初始化和自定义初始化时,是否应该删除默认初始化程序?

无法使用自定义初始化文件在“magit-status-mode”中运行 emacs

如何使用自定义属性初始化 SparkContext?

使用自定义ChangeNotifier初始化riverpod Provider

初始化前使用的自定义变量“层”

快速创建不带自定义名称参数的自定义初始化程序

自定义绑定初始化

重载>>运算符,并使用自定义类型的初始化列表初始化

以自定义tableviewcell以编程方式初始化UITableViewController的子类

子类化使用SpriteKit .sks场景文件创建的SKNode

使用自定义注释注释的bean的自定义初始化