我是一个Web开发人员(游戏开发人员作为一个爱好),我已经看到自己使用以下范例几次. (两者都在开发服务器架构和视频游戏开发工作.)看起来真的很丑陋,但我不知道有没有工作.我会在游戏开发中给一个例子,因为这是我最近注意到的地方.这是我一直在努力的RPG.每次发动战斗时,战斗发动机都将组建战斗人员的双方.每个战斗机设置一个与给定的战斗机相关联的ArtificialIntelligence对象,该战斗机负责指示不接收明确命令的玩家的移动:
public class Combatant {

    ArtificialIntelligence ai = null;

    public Combatant()
    {
        // Set other fields here.

        this.ai = new ArtificialIntelligence(this);
    }

}

这里是我不喜欢的:内部领域(ArtificialIntelligence)在施工期间采取战斗,因为它需要一些战斗领域才能规定适当的行动.所以,为了方便起见,我保留对作为参考的作战人员的引用到ArtificialIntelligence对象,但是该对象包含对ai对象本身的引用!它创建了这个奇怪的递归,但我不知道如何解决它. AI对象需要很多特定于战斗员的领域,所以这就是为什么我在整个对象中传递,但是我不喜欢对象然后包含对包含在上层战斗员中的ai字段的引用字段,它包含在上层的ai类中.这是不好的做法,还是我只是在想呢?

解决方法

虽然这里没有“设计”的问题,但这只是您通过的一个参考 – 一个重要的考虑因素是在将其传递给另一个类之前,应该初始化所有的字段.否则,另一个类将以可能不一致的状态访问此类.这有时被称为让这个“逃脱”从构造函数.

不要这样做

public class BadCombatant {

    ArtificialIntelligence ai = null;
    String someField;

    public BadCombatant() {
        this.ai = new ArtificialIntelligence(this);
        // Don't do this - ArtificialIntelligence constructor saw someField as null
        someField = "something"; 
    }

java – 引用类引用通过类构造的更多相关文章

  1. ios – Marmalade SDK是否与游戏开发更相关或更常用?

    我是移动应用程序开发的新手,并且正在寻找一个适合的平台.我遇到了一个项目,人们希望将交换机和家庭自动化公司的自助广告实施到移动应用程序中.他们最初想要一个iPhone应用程序,但也希望随后在Android和其他平台上部署.一个类似的应用程序是这one.在投入大量时间研究各种SDK和开发人员计划之后,Marmalade通过它的多平台部署功能引起了我的注意.然而,在经历了一些教程之后,我发现these

  2. Swift游戏开发案例实战——互动出版网

    通过完整的过程,帮助读者更好的掌握开发过程内容简介本书是国内第一本Swift游戏开发图书。本书由浅入深、全面、系统地讲解了Swift游戏开发的基础知识和各项关键技术,其中重点介绍了5个游戏项目案例的开发,供读者实战演练。本书涉及面广,从基本的操作到游戏开发的关键技术,再到游戏项目案例实战,几乎涉及SwiftiOS游戏开发的各方面的重要知识。出版了《Swift入门很简单》和《Swift游戏开发案例实战》等图书。

  3. unity3d – Android游戏开发使用统一3D教程

    我是团结3D的新手.我打算用Unity3D开发一个安卓游戏,我已经在网上搜索了Unity3D中的android相关教程,但是找不到一个好的开发人员教我一个应用程序启动,所以大家请建议我一个网站我可以启动.我需要android教程,而不是独立的平台教程.提前致谢.解决方法你可以使用Google或Unity3Dofficialdocumentation.

  4. Pygame游戏开发之太空射击实战盾牌篇

    相信大多数8090后都玩过太空射击游戏,在过去游戏不多的年代太空射击自然属于经典好玩的一款了,今天我们来自己动手实现它,在编写学习中回顾过往展望未来,在本课中,我们将为玩家添加一个盾牌以及一个用于显示盾牌等级的栏

  5. Pygame游戏开发之太空射击实战入门篇

    相信大多数8090后都玩过太空射击游戏,在过去游戏不多的年代太空射击自然属于经典好玩的一款了,今天我们来自己动手实现它,在编写学习中回顾过往展望未来,下面开始入门篇

  6. Python图形用户界面与游戏开发实例详解

    GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,下面这篇文章主要给大家介绍了关于Python图形用户界面与游戏开发的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  7. windows – 如何了解跨平台游戏开发?

    像Valve这样的公司如何设法向所有三个主要游戏平台发布游戏?

  8. java – 软件和游戏模板是如何设计的?

    请不要介意我的问题,因为我对软件知之甚少,因为我来自网络视角.例如,在webcss中用于设计和外观所以..如何使用c和java等程序为软件和游戏创建设计,模板和环境?他们的设计是否有相同的语言?您还需要一些软件来编辑您的资产.

  9. 我是一位经验丰富的C开发人员 – 我怎样才能进入游戏行业?

    多年来,我一直在嵌入式环境中使用C语言开发导航应用程序.在我的家乡有一家游戏公司,我喜欢它的外观,但我没有游戏开发经验.您可以将导航应用视为一种游戏类型,具体取决于您的运行对象.我的问题是,我应该采取什么步骤进入这个行业?在这个阶段进入这个行业是不是一个坏主意?

  10. c – 游戏开发:我应该编写我的关卡还是从文件中解释它们?

    游戏将用C语言编写编程:或者从这样的文件中解释它们:程序会更容易,人们不能编辑你的关卡.但是编制这一切可能有点垃圾吗?还有其他理由选择编程或口译吗?内存管理怎么样?如何在级别卸载时删除(游戏)对象?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部