Ios GameplayKit Ai,无板模型
我目前正在开发一个游戏,玩家从屏幕两侧相互发射炮弹。(就像appstore上的Bow masters游戏。) 我目前正在尝试将Ai集成到游戏中,作为使用gameplaykit的对手团队进行游戏 我的问题是我正在阅读如何做,他们使用一个棋盘,将所有的棋盘点排列在一个阵列中,我的游戏不使用棋盘,它只是有玩家的生命值,并使用向量和脉冲投掷投射物,所以没有棋盘,只有投射物降落的位置,以及是否击中玩家 当我没有实际的棋盘时,如何为此创建GKGameModel? 以下是我目前掌握的代码: 射弹射击代码:Ios GameplayKit Ai,无板模型,ios,swift,xcode,sprite-kit,gameplay-kit,Ios,Swift,Xcode,Sprite Kit,Gameplay Kit,我目前正在开发一个游戏,玩家从屏幕两侧相互发射炮弹。(就像appstore上的Bow masters游戏。) 我目前正在尝试将Ai集成到游戏中,作为使用gameplaykit的对手团队进行游戏 我的问题是我正在阅读如何做,他们使用一个棋盘,将所有的棋盘点排列在一个阵列中,我的游戏不使用棋盘,它只是有玩家的生命值,并使用向量和脉冲投掷投射物,所以没有棋盘,只有投射物降落的位置,以及是否击中玩家 当我没有实际的棋盘时,如何为此创建GKGameModel? 以下是我目前掌握的代码: 射弹射击代码: l
let touchDX = touchLocation.x//your calculation
let touchDY = touchLocation.y//your calculation
let touchLength = sqrt(touchDX*touchDX+touchDY*touchDY)
let unitVectorDX = touchDX / touchLength
let unitVectorDY = touchDY / touchLength
let speed:CGFloat = touchLength / 150
vector = CGVector(dx: -unitVectorDX * speed, dy: unitVectorDY * speed)
playerBullet.physicsBody?.applyImpulse(vector)
class Player: SKNode, GKGameModelPlayer {
var playerSprite = SKSpriteNode()
var playerId: Int = 0
var health = 100
func createPlayer(playerColor: UIColor, pos: CGPoint, posZ: CGFloat) {
//CREATE PLAYER HERE
playerSprite = SKSpriteNode(texture: nil, color: playerColor ?? .white, size: CGSize(width: 50, height: 50))
playerSprite.position = pos
playerSprite.zPosition = posZ
}
}
class Move: NSObject, GKGameModelUpdate {
var value: Int = 0
var coordinate: CGPoint
init(_ coordinate: CGPoint) {
self.coordinate = coordinate
}
}
class Board: NSObject, GKGameModel {
//Zone is an old concept that doesn't really help but it works
func copy(with zone: NSZone? = nil) -> Any {
let copy = Board()
copy.setGameModel(self)
return copy
}
func setGameModel(_ gameModel: GKGameModel) {
if let board = gameModel as? Board {
//DO STUFF HERE
//slots = board.slots
//currentPlayer = board.currentPlayer
}
}
}
到目前为止的AI代码:
let touchDX = touchLocation.x//your calculation
let touchDY = touchLocation.y//your calculation
let touchLength = sqrt(touchDX*touchDX+touchDY*touchDY)
let unitVectorDX = touchDX / touchLength
let unitVectorDY = touchDY / touchLength
let speed:CGFloat = touchLength / 150
vector = CGVector(dx: -unitVectorDX * speed, dy: unitVectorDY * speed)
playerBullet.physicsBody?.applyImpulse(vector)
class Player: SKNode, GKGameModelPlayer {
var playerSprite = SKSpriteNode()
var playerId: Int = 0
var health = 100
func createPlayer(playerColor: UIColor, pos: CGPoint, posZ: CGFloat) {
//CREATE PLAYER HERE
playerSprite = SKSpriteNode(texture: nil, color: playerColor ?? .white, size: CGSize(width: 50, height: 50))
playerSprite.position = pos
playerSprite.zPosition = posZ
}
}
class Move: NSObject, GKGameModelUpdate {
var value: Int = 0
var coordinate: CGPoint
init(_ coordinate: CGPoint) {
self.coordinate = coordinate
}
}
class Board: NSObject, GKGameModel {
//Zone is an old concept that doesn't really help but it works
func copy(with zone: NSZone? = nil) -> Any {
let copy = Board()
copy.setGameModel(self)
return copy
}
func setGameModel(_ gameModel: GKGameModel) {
if let board = gameModel as? Board {
//DO STUFF HERE
//slots = board.slots
//currentPlayer = board.currentPlayer
}
}
}