《游戏编程模式》学习笔记(十二)子类沙箱 Subclass Sandbox

这篇具有很好参考价值的文章主要介绍了《游戏编程模式》学习笔记(十二)子类沙箱 Subclass Sandbox。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义

基类定义抽象的沙箱方法和几个提供的操作。 将操作标为protected,表明它们只为子类所使用。 每个推导出的沙箱子类用提供的操作实现了沙箱函数。

举个例子

假设我们在做一个超级英雄的游戏,我们现在要实现一些超能力。我们计划创建一个Superpower基类。然后由它派生出各种超级能力的实现类。 由于超能力种类繁多,而且逻辑各异,有些超能力要进行大量的物理计算,有些超能力需要大量掉哟个到游戏的动画系统,有些超能力需要播放很多音频…

这意味着这些超能力需要与游戏引擎内的方法产生大量的交互调用。而且如果有些引擎的API发生了改变,可能会有大量的超能力类要重写。这样可不好,耦合性太高了,我们讨厌如此多的大量耦合。
这个时候我们就可以使用子类沙箱的方法来避免这一情况。我们要做的就是统一将所有的方法都放在基类的protected字段下,而子类都通过访问基类中的这些方法来实现自己的功能。这样就可以将众多的子类和引擎代码解耦。

代码如下:

class Superpower
{
public:
  virtual ~Superpower() {}

protected:
  virtual void activate() = 0;

  void move(double x, double y, double z)
  {
    // 实现代码……
  }

  void playSound(SoundId sound, double volume)
  {
    // 实现代码……
  }

  void spawnParticles(ParticleType type, int count)
  {
    // 实现代码……
  }
};
然后实现某一个子类
class SkyLaunch : public Superpower
{
protected:
  virtual void activate()
  {
    // 空中滑行
    playSound(SOUND_SPROING, 1.0f);
    spawnParticles(PARTICLE_DUST, 10);
    move(0, 0, 20);
  }
};

我们通过将耦合约束到一个地方解决了耦合问题。 Superpower最终与不同的系统耦合,但是继承它的几百个类不会。 相反,它们只耦合基类。 当游戏系统的某部分改变时,修改Superpower也许是必须的,但是众多的子类不需要修改。这就是子类沙箱模式。

何时使用子类沙箱?

• 你有一个能推导很多子类的基类。
• 基类可以提供子类需要的所有操作。
• 在子类中有行为重复,你想要更容易地在它们间分享代码。
• 你想要最小化子类和程序的其他部分的耦合。文章来源地址https://www.toymoban.com/news/detail-704372.html

到了这里,关于《游戏编程模式》学习笔记(十二)子类沙箱 Subclass Sandbox的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JUC并发编程学习笔记(十二)Stream流式计算

    什么是Stream流式计算 大数据:存储+计算 集合、MySql这些的本质都是存储东西的; 计算都应该交给流来操作! 一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算

    2024年02月05日
    浏览(47)
  • 《游戏编程模式》--优化模式--学习

     在线阅读: 优化模式 · 游戏设计模式 参考文章:  GameDesignPattern_U3D_Version/Assets/010OptimizationPatterns at master · TYJia/GameDesignPattern_U3D_Version · GitHub 数据局部性介绍了计算机的存储层次以及如何使用其以获得优势。 脏标识帮你避开不必要的计算。 对象池帮你避开不必要的内存

    2024年02月05日
    浏览(31)
  • 中科大计网学习记录笔记(十二):TCP 套接字编程

    前前言:大家看到这一章节的时候一定不要跳过,虽然标题是编程,但实际上是对 socket 的运行机制做了详细的讨论,对理解 TCP 有很大的帮助;但是由于本节涉及到了大量的编程知识,对于一些朋友来说不是很好理解,所以大家看本节的时候强烈建议结合我的这篇笔记来学习

    2024年02月22日
    浏览(56)
  • 《图解设计模式》笔记(二)交给子类

    AbstractClass(抽象类) 不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。 这些抽象方法由子类ConcreteClass角色负责实现。 在示例程序中,由AbstractDisplay类扮演此角色。 ConcreteClass(具体类) 该角色负责具体实现AbstractClass角色中定义的抽象方法。这里实现

    2024年02月22日
    浏览(34)
  • UNIX网络编程卷一 学习笔记 第二十二章 高级UDP套接字编程

    TCP是一个字节流协议,又使用滑动窗口,因此没有记录边界或发送者数据发送能力超过接收者接收能力之类的事情,但对于UDP,每个输入操作对应一个UDP数据报(一个记录),因此当收取的数据报大于引用的输入缓冲区时就有问题。 UDP是不可靠协议,但有些应用确实有理由使

    2024年02月12日
    浏览(60)
  • Linux 网络编程学习笔记——十二、高性能 I/O 框架库 Libevent

    在处理 I/O 事件、信号和定时事件时,需要考虑如下三个问题: 统一事件源:很明显,统一处理这三类事件既能使代码简单易懂,又能避免一些潜在的逻辑错误。 可移植性:不同的操作系统具有不同的 I/O 复用方式,比如 Solaris 的 dev/poll 文件,FreeBSD 的 kqueue 机制,Linux 的

    2023年04月08日
    浏览(56)
  • 命令模式 Command Pattern 《游戏设计模式》学习笔记

    对于一般的按键输入,我们通常这么做,直接if按了什么键,就执行相应的操作 在这里我们是将用户的输入和程序行为硬编码在一起,这是我们很自然就想到的最快的做法。 但是如果这是一个大型游戏,往往我们需要实现一个按键配置的功能(话说2077直到上线都没有实现这

    2024年02月14日
    浏览(43)
  • 嵌入式学习笔记(1)ARM的编程模式和7种工作模式

        ARM态-ARM指令集(32-bit)     Thumb态-Thumb指令集(16-bit)     Thumb2态-Thumb2指令集(16 32 bit) Thumb指令集是对ARM指令集的一个子集重新编码得到的,指令长度为16位。通常在处理器执行ARM程式时,称处理器处于ARM状态;当处理器执行Thumb程式时,称处理器处于Thumb状态。

    2024年02月10日
    浏览(48)
  • JUC并发编程学习笔记(十七)彻底玩转单例模式

    单例中最重要的思想-------构造器私有! 恶汉式、懒汉式(DCL懒汉式!) 恶汉式 懒汉式 DCL懒汉式 完整的双重检测锁模式的单例、懒汉式、DCL懒汉式 但是有反射!只要有反射,任何的代码都不安全,任何的私有都是摆设 正常的单例模式: 反射破坏单例: 怎么去解决这

    2024年02月05日
    浏览(46)
  • 设计模式学习笔记 - 开源实战三(下):借助Google Guava学习三大编程范式中的函数式编程

    现在主流的编程范式主要有三种,面向过程、面向对象和函数式编程。在理论部分,已经介绍了前面两种编程范式。本章再讲讲剩下的编程范式,函数式编程。 函数式编程并非是一个很新的东西,早在 50 年前就已经出现。近几年,函数式编程越来越被人关注,出现了很多新

    2024年04月22日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包