俄罗斯贵宾会-俄罗斯贵宾会官网
做最好的网站

运用GamePlayKit的GKEntity及GKComponent俄罗斯贵宾会: 的iOS游戏开发实例

GameplayKit是一个面向对象的框架,为构建游戏提供基础工具和技术。 GameplayKit包含用于设计具有功能性,可重用架构的游戏的工具,以及用于构建和增强诸如角色移动和对手行为的游戏玩法特征的技术。

版本记录

版本号 时间
V1.0 2018.02.06

 

前言

GameplayKit框架,构建和组织你的游戏逻辑。 整合常见的游戏行为,如随机数生成,人工智能,寻路和代理行为。接下来几篇我们就一起看一下这个框架。

俄罗斯贵宾会 1

Overview

下面先看一下该框架的基本信息。

俄罗斯贵宾会 2

GameplayKit是一个面向对象的框架,为构建游戏提供基础工具和技术。 GameplayKit包含用于设计具有功能性,可重用架构的游戏的工具,以及用于构建和增强诸如角色移动和对手行为的游戏玩法特征的技术。

下面看一下该框架的基本结构。

俄罗斯贵宾会 3

俄罗斯贵宾会 4


GamePlayKit

Getting Started with GameplayKit - GameplayKit开始

GameplayKit涵盖游戏设计和开发的许多方面。 有关游戏设计模式的更深入讨论,您可以使用GameplayKit,以及说明使用GameplayKit功能构建游戏的教程,请参阅GameplayKit Programming Guide


我们这里主要讲GKEntity和GKComponent这二个类;

Related Sample Code - 相关示例代码

要实验GameplayKit,请参阅以下示例代码项目:


GKEntity类(实体): 可以容纳很多组件的容器,根据自己的需求来加入相应的Component组件。

GKComponent类(组件):代表一种功能和行为,不同的组件代表不同的功能。

Topics

实用功能
(1)方便通过聚合多种组件,构建复杂的新实体Entity。
(2)不同的实体GKEntity,通过聚合不同种类的组件GKComponent来实现。
(3)不必重复写组件,组件可以复用,也易于扩展。
(4)实体可以实现动态添加组件,以动态获得或者删除某些功能。

1. Entities and Components

用于设计可组合的,可重复使用的游戏逻辑的通用架构。

  • GKEntity

    • 与游戏相关的对象,其功能完全由一组组件对象提供。
  • GKComponent

    • 抽象超类,用于创建将特定游戏玩法功能添加到实体的对象。
  • GKComponentSystem

    • 为指定类的所有组件对象管理定期更新消息。

直接通过代码来理解这二个类:

2. State Machines

用于定义状态相关游戏逻辑的模块化系统。

  • GKState

    • 抽象超类,用于将状态特定的逻辑定义为状态机的一部分。
  • GKStateMachine

    • 一个有限状态机 - 一个状态对象的集合,每个状态对象定义了游戏玩法的特定状态的逻辑和状态之间转换的规则。

 

3. Spatial Partitioning

数据结构,组织游戏世界中的对象,以快速搜索位置或邻近度。

  • GKQuadtree

    • 用于根据二维空间中的位置来组织对象的数据结构。
  • GKQuadtreeNode

    • 用于管理在四叉树中组织的对象的辅助类。
  • GKOctree

    • 用于根据三维空间中的位置来组织对象的数据结构。
  • GKOctreeNode

    • 用于管理在八叉树中组织的对象的辅助类。
  • GKRTree

    • 一种数据结构,根据二维空间中的位置自适应组织对象。

俄罗斯贵宾会 5

4. Strategists

用于计划的AI形式在回合制游戏中移动。 通过创建采用游戏模型协议的类来描述您的游戏玩法,然后使用这些类与策略对象来创建AI玩家或建议移动。

  • GKStrategist

    • 提供人工智能的对象的一般接口,用于回合(和类似)游戏。
  • GKMinmaxStrategist

    • 使用确定性策略选择回合制游戏的人工智能。
  • GKMonteCarloStrategist

    • 使用概率策略选择回合制游戏的人工智能
  • GKGameModel

    • 实施这个协议来描述你的游戏模型,这样一个战略对象可以计划游戏的移动
  • GKGameModelPlayer

    • 执行这个协议来描述你的回合制游戏中的一个玩家,这样一个策略对象可以计划游戏的移动。
  • GKGameModelUpdate

    • 实施这个协议来描述在你的回合制游戏中的一个移动,以便一个策略对象可以计划游戏的移动。

Flying Penguin

5. Decision Trees

定义一系列问题和可能的答案,最终采取行动,或根据您提供的数据自动构建预测模型。

  • GKDecisionTree

    • 一个数据结构,模拟一系列具体的问题,他们可能的答案,以及一系列答案中的后续行动。
  • GKDecisionNode

    • 用于手动创建决策树的节点,代表特定的问题和可能的答案,或回答其他问题后的操作。

PenguinEntity.swift 是用来管理 Component三个组件的

6. Pathfinding

创建图形,模拟您的游戏世界的导航性,允许GameplayKit规划游戏角色的最佳路线。

  • GKGraph

    • 描述游戏世界的可导航性并提供寻路方法来搜索通过该空间的路线的节点的集合。
  • GKObstacleGraph

    • 2D游戏世界的导航图形创建了一个最小的网络,用于在障碍物周围进行精确的路径查找。
  • GKMeshGraph

    • 2D游戏世界的导航图形创建了一个空间填充网络,可以在障碍物周围进行平滑寻路。
  • GKGridGraph

    • 2D游戏世界的导航图,其中运动被限制为整数网格。
  • GKGraphNode

    • 导航图中的单个节点用于寻路。
  • GKGraphNode2D

    • 导航图中的一个节点,与连续2D空间中的一个点相关联。
  • GKGraphNode3D

    • 导航图中的一个节点,与连续三维空间中的一个点相关联。
  • GKGridGraphNode

    • 导航图中的一个节点,与离散二维网格上的位置关联。
import SpriteKit
import GameplayKit

class PenguinEntity:GKEntity {

    var spriteComponent:SpriteComponent! // 属性 大小 texture
    var moveComponent:MoveComponent!     // 移动组件功能;
    var animationComponent:AnimationComponent! //拍打翅膀的组件;

    init(imageName:String) {
        super.init()
        let texture = SKTexture(imageNamed: imageName)
        spriteComponent = SpriteComponent(entity: self, texture: texture, size: texture.size())
        addComponent(spriteComponent)
        // 加入上下飞动的组件
        moveComponent = MoveComponent(entity: self)
        addComponent(moveComponent)

        // 加入拍打翅膀的动画
        let textureAltas = SKTextureAtlas(named: "penguin")
        var textures = [SKTexture]()
        for i in 1...textureAltas.textureNames.count {
            let imageName = "penguin0(i)"
            textures.append(SKTexture(imageNamed: imageName))
        }
        animationComponent = AnimationComponent(entity: self, textures: textures)
        addComponent(animationComponent)

    }
     // Add Physics
    func addPhysics(){
        let spriteNode = spriteComponent.node
        spriteNode.physicsBody = SKPhysicsBody(texture: spriteNode.texture!, size: spriteNode.frame.size)
        spriteNode.physicsBody?.categoryBitMask  = PhysicsCategory.Player
        spriteNode.physicsBody?.contactTestBitMask = PhysicsCategory.Coin | PhysicsCategory.Obstacle | PhysicsCategory.Floor
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

7. Agents, Goals, and Behaviors

通过结合高层次的目标,例如移动到目标,遵循路径或避开障碍,将自主移动添加到角色和其他游戏对象。

  • GKAgent

    • 根据一组目标和现实约束来移动游戏实体的组件。
  • GKAgent2D

    • 在二维空间中操作的代理。
  • GKAgent3D

    • 在三维空间中运作的代理
  • GKGoal

    • 激励一个或多个代理人移动的影响。
  • GKBehavior

    • 一套共同影响代理人运动的目标。
  • GKCompositeBehavior

    • 一组行为,每个行为都是一组目标,共同影响一个代理人的行动。
  • GKPath

    • 一个代理可以跟随的多边形路径。
  • GKAgentDelegate

    • 实现这个协议来同步一个代理的状态和它在游戏中的可视化表示。

本文由俄罗斯贵宾会发布于编程,转载请注明出处:运用GamePlayKit的GKEntity及GKComponent俄罗斯贵宾会: 的iOS游戏开发实例

您可能还会对下面的文章感兴趣: