【发布时间】:2020-05-08 22:00:56
【问题描述】:
我正在尝试在我的应用程序中实现GKGameModel。在其中,它包含一些变量,但就我的问题而言,我对以下两个变量感兴趣:
import GameplayKit
final class GameModel: NSObject, GKGameModel {
var players: [GKGameModelPlayer]?
var activePlayer: GKGameModelPlayer?
}
我做了这样的事情来初始化 3 名玩家的游戏(不准确)
let game = GameModel.init()
game.players = [Player(),Player(),Player()] // Create 3 players
guard let firstPlayer = game.players.first else {
return
}
game.activePlayer = firstPlayer
一个播放器类定义为:
class Player : NSObject, GKGameModelPlayer {
var playerId: Int // GKGameModelPlayer protocol variable
let name: String
var cash: Int = 0
}
在我的项目中,我有领域实体和分离的模型。所以会有一个PlayerEntity 和一个Player 类。
我想使用RealmSwift 来保存和加载GKGameModelPlayer 数据,更具体地说是存储/重新存储活动玩家的能力。
我认为这里的关键是playerId 变量;但我不确定。
但我不确定的是检索此信息,然后将其重新映射为有效的GKGameModelPlayer 格式
我目前的想法/理论是我需要将我的模型映射到实体类,反之亦然。
即:
// [REALM] Player entity
class PlayerEntity: Object {
@objc dynamic var id = UUID().uuidString
@objc dynamic var playerId: Int = 0
@objc dynamic var name: String = ""
@objc dynamic var cash: Int = 0
override static func primaryKey() -> String {
return "id"
}
}
然后我扩展这个类来做一些“映射”:
extension PlayerEntity {
// Map model -> entity
convenience init(model: Player) {
self.init()
self.playerId = model.playerId
self.name = model.name
self.cash = model.cash
}
}
extension Player {
// Map entity -> model
convenience init(entity: PlayerEntity) {
let playerId = entity.playerId
let name = entity.name
let cash = entity.cash
self.init(id: playerId, name: name, cash: cash)
}
}
现在,playerId 始终为零 (0),因为我不确定如何设置它。
我可以将玩家保存到服务器。
问题来自于我尝试恢复播放器时,我想恢复GameModel中的activePlayer变量
因此,我的问题是:
我将如何保存和恢复 activePlayer 变量以使其继续符合 GKGameModelPlayer?
感谢您对此提供的任何帮助。
感谢
【问题讨论】:
标签: swift realm gameplay-kit