我目前正在快速编写游戏,并且正在尝试使用协议来定义诸如章节和级别等内容。
因此,一章可能具有以下结构:
protocol Chapter {
var title:String {get}
var levels:[Level] {get}
var choices:[OptionSetType]
}
每个章节由多个级别组成,每个级别只有在满足某些“选择”时才能访问。
为此,我将跟踪这些选择并使用位掩码来查看是否满足条件。然而,每个章节的选择可能不同,但我想构建我的游戏机制,这样他们就不必担心确定用户实际在哪个章节。
这个想法是每个级别都有一个“点”值,我只是计算点值是否包含相关的选择位掩码。
因此,对于“级别”,我尝试定义一个协议,例如
protocol Level {
var text:String {get}
var score:OptionSetType {get} // this is what determines if a level can be shown if the right chapter 'choices' have been set
}
这给出了一个错误
Protocol 'OptionSetType' can only be used as a generic constraint because it has Self or associated type requirements
现在每章理论上都有自己的一组选项,但我想知道如何使这个足够通用,以便我几乎可以围绕这个编写引擎,而不是编写每个特定的章节。这就是为什么我认为我会创建协议。问题是当我需要定义设置的 OptionSetType 值并且不能说属性将属于 OptionSetType 类型时,我该如何进行位掩码工作。希望这有意义吗?