gpt4 book ai didi

swift - 如何以面向协议(protocol)的方式创建我的游戏架构?

转载 作者:可可西里 更新时间:2023-11-01 02:18:05 26 4
gpt4 key购买 nike

我还没有找到任何好的方法来为游戏设计面向协议(protocol)的项目架构。

这是带有 Structs 的第一个版本:

protocol Usable {
func useItem()
}
protocol Item {
var name: String { get }
var amount: Int { get }
var image: String { get }
}
struct Sword: Item, Usable {
var name = ""
var amount = 0
var image = ""
func useItem() {

}
}
struct Shield: Item, Usable {
var name = ""
var amount = 0
var image = ""
func useItem() {

}
}

问题是我必须复制粘贴变量,这些变量是跨项目的大量代码。

这是带有类的第二个版本:

protocol Usable {
func useItem()
}
class BaseItem {
var name = ""
var amount = 0
var image = ""
}
class SwordClass: BaseItem, Usable {
func useItem() {

}
}

这看起来不错,但问题是这些是引用类型,我更希望它们是值类型。

解决这个问题的正确方法是什么?

最佳答案

您应该创建一个符合您的协议(protocol)并需要使用默认值和“使用”闭包进行初始化的通用结构:

protocol Usable {
func useItem()
}
protocol Item {
var name: String { get }
var amount: Int { get }
var image: String { get }
}
struct UsableItem: Item, Usable {
var name = ""
var amount = 0
var image = ""
let use: (Void -> Void)

init(name: String, image: String, use: (Void -> Void)) {
self.name = name
self.image = image
self.use = use
}

func useItem() {
self.use()
}
}

然后您的 JSON 处理将创建具有适当逻辑的实例:

var sword = UsableItem(name: "sword", image: "sword") {
print("cut")
}

关于swift - 如何以面向协议(protocol)的方式创建我的游戏架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34808517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com