Ios GameplayKit Ai,无板模型

Ios GameplayKit Ai,无板模型,ios,swift,xcode,sprite-kit,gameplay-kit,Ios,Swift,Xcode,Sprite Kit,Gameplay Kit,我目前正在开发一个游戏,玩家从屏幕两侧相互发射炮弹。(就像appstore上的Bow masters游戏。) 我目前正在尝试将Ai集成到游戏中,作为使用gameplaykit的对手团队进行游戏 我的问题是我正在阅读如何做,他们使用一个棋盘,将所有的棋盘点排列在一个阵列中,我的游戏不使用棋盘,它只是有玩家的生命值,并使用向量和脉冲投掷投射物,所以没有棋盘,只有投射物降落的位置,以及是否击中玩家 当我没有实际的棋盘时,如何为此创建GKGameModel? 以下是我目前掌握的代码: 射弹射击代码: l

我目前正在开发一个游戏,玩家从屏幕两侧相互发射炮弹。(就像appstore上的Bow masters游戏。)

我目前正在尝试将Ai集成到游戏中,作为使用gameplaykit的对手团队进行游戏

我的问题是我正在阅读如何做,他们使用一个棋盘,将所有的棋盘点排列在一个阵列中,我的游戏不使用棋盘,它只是有玩家的生命值,并使用向量和脉冲投掷投射物,所以没有棋盘,只有投射物降落的位置,以及是否击中玩家

当我没有实际的棋盘时,如何为此创建GKGameModel?

以下是我目前掌握的代码:

射弹射击代码:

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
    }
}


}