Questions tagged «oop»

面向对象的编程。使用对象(由属性和方法组成的类的实例)设计游戏的范例。技术可以包括数据抽象,封装,消息传递,模块化,多态性和继承。

8
我应该避免使用对象继承来开发游戏吗?
使用Unity开发游戏时,我更喜欢OOP功能。我通常创建一个基类(大多是抽象的),并使用对象继承将相同的功能共享给其他各种对象。 但是,我最近听到某人的消息,必须避免使用继承,而应该改用接口。所以我问为什么,他说:“对象继承当然很重要,但是如果有很多扩展对象,类之间的关系就深深地耦合了。 我使用的是一个抽象基类,像WeaponBase和创建如特定的武器类Shotgun,AssaultRifle,Machinegun类似的东西。有这么多优点,我真正喜欢的一种模式是多态。我可以将子类创建的对象当作基类一样对待,这样可以大大减少逻辑并使其更可重用。如果需要访问子类的字段或方法,则回退到子类。 我不想定义字段相同,在不同的类,常用的像AudioSource/ Rigidbody/ Animator和很多我这样定义成员字段的fireRate,damage,range,spread等等。同样在某些情况下,某些方法可能会被覆盖。因此,在这种情况下,我使用的是虚拟方法,因此基本上可以使用父类中的方法来调用该方法,但是如果子级中的逻辑不同,则可以手动覆盖它们。 因此,是否应将所有这些东西当作坏习惯丢弃?我应该改用接口吗?

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

6
如何在C ++引擎编程中正确使用单例?
我知道单例很糟糕,我的旧游戏引擎使用了单例“ Game”对象,该对象处理从保存所有数据到实际游戏循环的所有事情。现在我要制作一个新的。 问题是,要在SFML中绘制某些内容,请window.draw(sprite)在window是的地方使用sf::RenderWindow。我在这里看到2个选项: 制作一个单例游戏对象,游戏中的每个实体都将检索该对象(我以前使用过的对象) 使它成为实体的构造函数:(Entity(x, y, window, view, ...etc)这只是荒谬而烦人的) 在将实体的构造函数保持为x和y的同时,执行此操作的正确方法是什么? 我可以尝试跟踪我在主游戏循环中所做的所有事情,只是在游戏循环中手动绘制其精灵,但这似乎也很麻烦,我也希望对实体的整个绘制功能具有绝对的完全控制权。

6
具有许多属性的Hero的OOP架构
我将开始一个简单的浏览器文本RPG,其字符可以(被动地)与其他人抗衡。这涉及大约10种技能的列表,例如力量,灵巧性等,另外还具备使用不同武器的能力。 是否只有将这些技能作为类属性来设计这个角色类,还有更好的方法?看起来很简单,但是我很不情愿,因为它很笨拙。 class Char(self): int strength int dexterity int agility ... int weaponless int dagger ...
14 architecture  oop 

3
组成重的OOP与纯实体组件系统?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我承认,我犯了过度使用甚至滥用继承的罪过。我上OOP课程时所做的第一个(文字)游戏项目远比“门”和“一扇门的房间”,“两扇门的房间”中的“锁门”和“解锁门”有关,以此类推。 通过最近我从事的(图形)游戏,我认为自己已经学到了教训,并限制了继承的使用。但是我注意到问题很快开始出现。我的根类开始越来越膨胀,而我的叶类中充满了重复的代码。 我以为我还是在做错事,在网上查询之后,我发现我并不是唯一遇到此问题的人。经过一些深入的研究,我最终才发现了实体系统(请参阅:googlefu) 当我开始阅读它时,我能够看到它能够多么清晰地解决我的带有组件的传统OOP层次结构所遇到的问题。这些是一读。当我偶然发现更多……“激进”的ES方法时,例如T-machine上的方法。 我开始不同意他们使用的方法。一个纯粹的组件系统似乎要么过大,要么不直观,这可能是OOP的优势。作者甚至说ES系统与OOP相反,尽管它可以在OOP中使用,但实际上不应该。我并不是说这是错误的,但是我只是觉得自己不想实施一个解决方案。 因此,对我来说,为了解决我在帖子开头所遇到的问题,而又不违背我的直觉,那就是仍然使用层次结构,但是它不会像我以前使用的那样是一个整体的层次结构,而是一种多片的(我找不到与单片相反的单词),它由几棵较小的树组成。 下面的示例说明了我的意思(这受我在《游戏引擎体系结构》第14章中找到的示例的启发)。 我会有一棵小树供车辆。根车辆类别将具有渲染组件,碰撞组件,位置组件等。 然后,坦克(车辆的子类)会从中继承这些组件,并被赋予自己的“加农炮”组件。 角色也是如此。角色将拥有自己的组件,然后让Player类继承它,并被赋予Input控制器,而其他敌人类将从Character类继承并被赋予AI控制器。 我真的看不到这种设计有任何问题。尽管没有使用纯的实体控制器系统,但是冒泡效果的问题和大根类的问题是通过使用多树层次结构解决的,繁重的代码复制叶子的问题也消失了,因为叶子没有有任何代码开始,只有组件。如果需要对叶级别进行更改,则就像更改单个组件一样简单,而不是将代码复制粘贴到任何地方。 当然,像我一样没有经验的人,当我刚开始使用单一层次结构,繁重的继承模型时,我没有看到任何问题,因此,如果我当前正在考虑实现的模型存在问题,我不会能够看到它。 您的意见? PS:我正在使用Java,因此无法使用多重继承来实现此功能,而不是使用常规组件。 PPS:组件间通信将通过相互链接相关的组件来完成。这将导致耦合,但是我认为这是一个不错的权衡。

3
如何用C ++组织游戏引擎?我使用继承是个好主意吗?
我是游戏开发和编程的初学者。 我正在尝试学习构建游戏引擎的一些原理。 我想创建一个简单的游戏,正要尝试实现游戏引擎。 所以我认为我的游戏引擎应该控制这些事情: - Moving the objects in the scene - Checking the collisions - Adjusting movements based on collisions - Passing the polygons to the rendering engine 我设计了这样的对象: class GlObject{ private: idEnum ObjId; //other identifiers public: void move_obj(); //the movements are the same for all the objects (nextpos …
11 c++  architecture  oop 

4
如何制作没有OOP的游戏?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我目前正在研究游戏开发和练习制作游戏。 我在游戏中经常使用OOP。例如,发射的每枚导弹都是一个Missile对象的实例,并添加到Missile对象列表中。游戏中的每个坦克都是一个Tank物体。等等。 该程序的整个设计都基于此。例如,拥有一个Missile物体列表可以使我每一帧移动导弹,牵引导弹等。而Tank每个坦克都有一个对象实例可以让我检查每个坦克是否与某些物体发生碰撞等。 我很难想象如何用非OO语言编写游戏(比《吃豆人》更复杂)。(当然也要尊重非OO程序员)。不仅要花费多长时间,而且主要要以这种方式设计游戏。 我无法想象不使用面向对象的程序设计游戏,因为我对如何设计游戏程序的全部理解是基于OOP的。 我想问一问:今天,有没有像我上面所描述的那样没有使用OOP编程的游戏?是否有没有将OOP用作开发过程中主要因素的“专业”游戏? 如果是这样,您能否给我一个想法,例如,在没有OOP的情况下,如何实现坦克与N枚导弹之间的碰撞检测?


3
AI代理如何访问有关其环境的信息?
这可能是一个琐碎的问题,但是我很难理解。非常感谢您的帮助。 在使用面向对象设计的游戏开发中,我想了解AI代理如何从游戏世界访问他们需要的信息以执行其动作。 众所周知,在游戏中,人工智能代理商经常需要“感知自己的环境”并根据周围发生的事情采取行动。例如,如果一个代理人足够靠近他,他可能被编程为追逐该玩家,在移动时避开障碍物(使用避障转向行为),等等。 我的问题是我不确定该怎么做。AI代理如何获取有关游戏世界所需的信息? 一种可能的方法是,代理简单地直接从游戏世界中请求他们需要的信息。 有一个叫做GameWorld的类。它处理重要的游戏逻辑(游戏循环,碰撞检测等),并保留对游戏中所有实体的引用。 我可以让这个班成为单身人士。当代理商需要游戏世界的信息时,它直接从GameWorld实例中获取信息。 例如,Seek当玩家靠近时,可以将一个坐席编程给玩家。为了做到这一点,经纪人必须获得球员的位置。因此,它可以直接直接请求:GameWorld.instance().getPlayerPosition()。 代理商也可以只获取游戏中所有实体的列表,并根据需要对其进行分析(以找出,或其他附近有哪些实体): GameWorld.instance().getEntityList() 这是最简单的方法:代理商直接联系GameWorld类并获取他们所需的信息。但是,这是我所知道的唯一方法。有更好的吗? 有经验的游戏开发人员将如何设计?天真的“获取所有实体的列表并寻找所需的东西”的方法吗?有哪些方法和机制可以使AI代理访问他们所需的信息以执行其动作?
9 architecture  ai  oop 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.