问题标签 [game-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C 语言还在游戏引擎中被广泛使用吗?
标题有点用词不当,我的意思是“C with classes”。
让我解释一下,最近我买了一本书 ShaderX7,它附带了 Unigine 引擎的精简版(和旧版)副本,用于其中一篇关于阴影贴图技术的文章。
当我意识到,虽然作者使用 C++ 和继承以及所有 C++ 优点时,我正在涉足代码,但大多数(如果不是全部)方法内容本质上是 C 风格的代码;例如:
我并不是说这很糟糕,它完成了工作,这才是最重要的,但我更习惯于 C++ 风格的构造,包括 std::string、vectors 等......而且我大量使用了 Boost 库;所以这种风格让我有点意外。
使用这种代码真的比使用通用的 OO 方式更好/更快吗?
我是不是掉进了“太多抽象”的陷阱?
编辑:更正方法名称以明确它在做什么。
oop - 基于组件的游戏引擎设计中的事件处理
我想这个问题或它的变体得到了很多传播,所以如果我说的是重复的,而答案在别处,请通知我。
我一直在研究游戏引擎设计,并遇到过基于组件的实体模型。这听起来很有希望,但我仍在研究它的实施。
我正在考虑一个系统,其中引擎由几个“子系统”组成,这些“子系统”管理某些方面,如渲染、声音、健康、人工智能等。每个子系统都有一个与之关联的组件类型,比如健康的健康组件子系统。一个“实体”,例如一个 NPC、一扇门、一些视觉效果或玩家,简单地由一个或多个组件组成,当它们一起赋予实体其功能时。
我确定了四个主要的信息传递渠道:一个组件可以广播到其当前实体中的所有组件,一个组件可以广播到它的子系统,一个子系统可以广播到它的组件,一个子系统可以广播到其他子系统。
例如,如果用户想要移动他们的角色,他们会按下一个键。这个按键将被输入子系统拾取,然后广播事件并被播放器子系统拾取。播放器子系统然后将此事件发送到所有播放器组件(以及这些组件组成的实体),并且这些播放器组件将与其自身实体的位置组件通信以继续移动。
按键操作的所有这些似乎有点啰嗦,我当然愿意改进这个架构。但无论如何,我的主要问题仍然存在。
至于事件本身,我考虑了事件在访问者模式中的行为。我想要的重要性在于,如果事件遇到它不支持的组件(因为在移动事件中与 AI 或健康没有直接关系),它将忽略该组件。如果一个事件没有找到它所追求的组件,那也没关系。
访问者模式几乎可以工作。但是,它要求我对每种类型的组件(即 visitHealthComponent、visitPositionComponent 等)都有虚函数,即使它与它们没有任何关系。我可以将这些函数留空(因此,如果确实遇到了这些组件,它将被忽略),但是每次添加组件时我都必须添加另一个函数。
我的希望是我能够添加一个组件而不必在其他地方添加东西,并且添加一个事件而不会弄乱其他东西。
所以,我的两个问题:
- 在效率、灵活性等方面,我的设计是否可以进行任何改进?
- 处理事件的最佳方式是什么?
3d - 什么是量化?
我正在尝试gamestudio A8,3d世界中使用的单位是quant。
我的问题是。一米有多少个量子?
我想在 SketchUp 中制作一些模型,并在那里使用仪表。我可以将模型转换为 mdl。
问题是。动画和移动对象时。我需要知道一米内有多少个量子。
我还希望尺寸与互联网上的其他型号相匹配。
android - AndEngine & SurfaceView (CameraPreview)
如何添加显示相机预览的 SurfaceView 作为 AndEngine 的 BaseGameActivity 的背景(物理示例)。
c# - 在 XNA 中需要一个干净的 TileMap 示例
去年,我和几个朋友每周都在开发 XNA RPG。我们的战斗引擎已经基本完成,现在我们正在进行世界探索。
我已经创建了以这种方式工作的原始 Tile 和 TileMap 对象:
- 表示列表中平铺(Texture2D)对象的简单二维整数值数组
- 使用 For 循环来渲染与屏幕大小完全相同的 TileMap
问题是,我怎样才能改变它来实现这样的功能?
- 制作比屏幕大的地图
- 平滑滚动 TileMap,只绘制必要的部分(例如 Viewport 可见)
脚注:我一直在尝试让滚动工作,但可能使用了错误的方法来实现它(即渲染图块部分以实现平滑的滚动外观)。然而,这从来没有正常工作,如果我能找到基本上可以绘制 TileMap 视口的东西,那就太好了。
此外,任何额外的链接或外部资源将不胜感激。即使是伪代码示例想法也会有很大帮助。
iphone - iPhone/Android 游戏引擎
是否可以为 iphone 和 android 做跨平台游戏引擎。如果它我该怎么做。我都认为我需要学习什么才能做到这一点。
c++ - C++控制台游戏输入&&刷新功能
我正在编写一个小型控制台冒险游戏,但遇到了一些问题。
1. 输入有点滞后,我正在使用 while 循环( while(getch() == 'w') )。第一次按下某个键后,什么也没有发生(您必须按两次),如果您切换方向(按 A/D/S 键),第一次也没有反应。如果你拿着钥匙,它工作正常。如何解决这个问题?
2.这是我用来刷新游戏的功能(按下按键时渲染游戏场景):
当我使用此功能一次时,没关系,但是当他们多次按下或按住键时 - 游戏区域开始闪烁。我想我只需要重绘该字段的一部分(进行更改/完成移动的地方),而不是整个字段。你能提供任何想法如何做到这一点吗?
输入示例代码:
基本上,主函数如下所示:
actionscript-3 - 在 AS3 中如何在不继承的情况下为多个类提供附加功能?
我正在用 ActionScript 编写一个游戏,其中我有多个应该被击球“击中”的类。
所有其他游戏内实体继承的最通用的类是 CombatObject;CombatShip、CombatAsteroid 和其他各种类都继承自它。CombatAi 和 CombatPlayer 类都继承自 CombatShip。
现在我想让 CombatAi、CombatPlayer 和 CombatAsteroid 可以被击中,但我不希望它们继承它(以后可能会有不应该被击中的 CombatShips)。
我现在的想法是让这三个实现一个接口,IHitable,这样当它们与一个镜头发生碰撞时,我可以询问if(hitObject is IHitable)
,如果是真的,让这个镜头被摧毁并造成伤害。
现在的问题是,最好有这些课程中的每一个
- 自己实现所有需要的代码来承受伤害(例如检查护盾、计算伤害百分比等)
- 让他们都拥有该类的一个实例
DamageManager
并实现一个函数getDamageManager():DamageManager
,该函数返回一个处理所有与损坏相关的功能的类 - (2.) 的一个缺点是每个 CombatShip、CombatAsteroid 等都必须拥有一个 DamageManager 实例。让 DamageManager 成为 Singleton 并且只引用船和给它的镜头并让它处理其余部分可能会更好吗?
c++ - 适用于 Android 的 C++ 渲染或游戏引擎。
我正在开发一个 Android 应用程序,我需要使用渲染引擎来显示我使用 Blend 制作的一些对象。
我想知道是否有 C++ 游戏引擎或渲染引擎来显示我的模型。
有人吗?
谢谢。
c++ - 在游戏中处理实体
作为一个小练习,我正在尝试编写一个非常小的、简单的游戏引擎,它只处理实体(移动、基本 AI 等)
因此,我正在尝试考虑游戏如何处理所有实体的更新,并且我有点困惑(可能是因为我以错误的方式进行操作)
所以我决定在这里发布这个问题,向您展示我目前的思考方式,并看看是否有人可以向我建议更好的方法。
目前,我有一个 CEngine 类,它指向它需要的其他类(例如 CWindow 类、CEntityManager 类等)
我有一个游戏循环,在伪代码中会像这样(在 CEngine 类中)
我的 CEntityManager 类看起来像这样:
我的 CEntity 类看起来像这样:
之后,我会为敌人创建类,并给它一个精灵表,它自己的功能等。
例如:
所有这些都适用于将精灵绘制到屏幕上。
但后来我遇到了使用存在于一个实体中但不存在于另一个实体中的函数的问题。
在上面的伪代码示例中,do_ai_stuff(); 和句柄输入();
从我的游戏循环中可以看出,有一个对 EntityManager->draw(); 的调用。这只是遍历 entityVector 并调用 draw(); 每个实体的功能 - 看到所有实体都有一个draw(),效果很好;功能。
但后来我想,如果它是一个需要处理输入的玩家实体怎么办?这是如何运作的?
我没有尝试过,但我认为我不能像使用 draw() 函数那样循环遍历,因为像敌人这样的实体不会有 handle_input() 函数。
我可以使用 if 语句来检查 entityType,如下所示:
但我不知道人们通常如何写这些东西,所以我不确定最好的方法。
我在这里写了很多,我没有问任何具体的问题,所以我将澄清我在这里寻找什么:
- 我布置/设计代码的方式是否可行,是否实用?
- 有没有更好更有效的方法来更新我的实体并调用其他实体可能没有的函数?
- 使用枚举来跟踪实体类型是识别实体的好方法吗?