GKAgent
来源:互联网 发布:模拟板胡软件 编辑:程序博客网 时间:2024/05/21 22:41
GKAgent
通过设定目标和约束移动实体的组件
概括
GKAgent类是抽象的,仅定义代理的一般功能-其运动约束和包含其目标(GKGoal对象)的行为属性。实现基于代理的游戏设计,请选择适合游戏的具体子类。
• 在2D游戏世界中使用GKAgent2D类,或是相关移动都限制在2D上的3D游戏。
• 在3D游戏世界中使用GKAgent3D类。
代理即组件
因为GKAgent是GKComponent的子类,你可以使用实体/组件结构将基于代理的设计带入到游戏设计中。
要将代理集成到游戏中,请在每次要更新管理代理程序行为的模拟时调用每个代理的updateWithDeltaTime: 方法。通常,你在每次图形引擎的每一帧进行调用-比方说,在SpriteKit的update: 方法或者SceneKit渲染代理方法的renderer:updateAtTime: 进行调用。如果你的游戏使用实体/组件结构,你也可以使用GKComponentSystem在每一帧时更新所有的代理,如果没有,你必须直接调用每一个代理的updateWithDeltaTime: 方法。
根据目标进行模拟运动
每一次调用代理的updateWithDeltaTime: 方法时,代理会评估每一个在其behavior属性中列出的GKGoal对象,以查找朝向实现该目标所需的方向和速度的变化(在时间增量和代理的最大速度和转弯率)。然后,它使用GKBehavior对象中指定的权重来调整所有目标的行为,从而调整每个目标的影响,导致其方向和速度的总体变化。
• 将每个代理的委托属性设置为负责该代理的可视化表示的对象。每一次代理更新位置和旋转时会调用这个对象实现的agentDidUpdate: 方法。在该方法中,你可以检查代理的属性并对可视化表示进行相应的更改。
此外一个代理的delegate可以实现agentWillUpdate: 方法来将信息提供给代理模拟。这样对于那些基于代理移动和外部物理引擎(例如SceneKit和SpriteKit中的物理引擎)结合的设计很有用,或是应用于代理的可视状态动作(如SpriteKit中的action方法)。不过,代理不能模拟类似重力这样的通过势力导致的动作,因此在这种情况下代理的计算将不再精准。
Tip
如果你使用GKSKNodeComponent来管理实体与SpriteKit的node关系,请设置GKSKNodeComponent实例为该实体的代理(agent),GameplayKit将自动同步agent和它SpriteKit中的对应对象。
注意
负责代理运动的模拟是基于现实的物理行为,然而这种模拟与SpriteKit,SceneKit或其他物理引擎子系统没有任何联系。比方说设置代理的质量,并不会影响SpriteKit中对应对象的物理体碰撞行为。
Topics
定义一个代理的行为(Defining an Agent’s Behavior)
behavior
一个有权重关系包含影响代理移动的goal集合。
约束一个代理的移动(Constraining an Agent’s Movement)
mass
代理改变速度或方向时的阻力。
maxAcceleration
代理速度或方向变化的上限。
maxSpeed
radius
代理的半径。同步代理的可视表现(Synchronizing an Agent’s Visual Representation)
delegate
模拟运动时进行准备或响应的对象。
管理代理属性(Managing an Agent’s Attributes)
speed
关系
继承
GKComponent
默认遵守
NSCoding
- GKAgent
- 通过tomcat7-maven-plugin插件启动java web项目一直失败
- TensorFlow GPU版本安装(3):Anoconda版本安装
- ASP.NET MVC之下拉框绑定四种方式
- MacOS 开发
- 面试总结(更新)
- GKAgent
- Java 8的新特性—终极版
- Machine Learning Yearning读书笔记(转载)
- 忘记密码中的邮箱验证
- springboot+mybatis+springmvc+mysql简单项目
- 背景图片全屏(背景图片没有撑满屏幕)
- 8-33 求二叉树的深度
- webbrowser获取无ID无Name控件并模拟点击
- echarts绵阳地图,点击区拿到对应区的数据