问题标签 [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.

0 投票
2 回答
770 浏览

game-engine - ublas::bounded_vector<> 正在调整大小?

现在,说真的……我会避免在这里使用坏词,因为我们正在谈论 Boost 研究员。这么看肯定是我的错,但我不明白为什么,所以在这里问一下;也许有人可以在这件事上启发我。它是这样的:

uBLAS 有一个很好的类模板,叫做bounded_vector<>它用于创建固定大小的向量(或者我认为是这样)。

来自有效的 uBLAS wiki ( http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS ):

默认的 uBLAS 向量和矩阵类型是可变大小的。许多线性代数问题涉及具有固定大小的向量。2和3元素在几何中很常见!固定大小的存储(类似于 C 数组)可以有效地实现,因为它不涉及与动态存储相关的开销(堆管理)。uBLAS 通过将向量/矩阵的底层存储从默认的“unbounded_array”更改为“bounded_array”来实现固定大小。

好吧,这个bounded_vector<>东西是用来让你免于将向量的底层存储指定为bounded_array<>指定大小的a。在这里我问你:看起来这个有界向量的东西对你来说不是固定大小的吗?好吧,它没有。

起初我觉得被 wiki 背叛了,但后来我重新考虑了“有界”的含义,我认为我可以让它过去。但是如果你和我一样(我仍然不确定),仍然想知道这是否有意义,我发现bounded_vector<>实际上可以调整大小,它可能不会大于指定为模板参数的大小。

  1. 那么,首先,您认为他们有充分的理由不制作真正的 >>固定<< 大小向量或矩阵类型吗?
  2. 您是否认为可以将这个有界(而不是固定大小)向量“出售”给我的库的用户作为“固定大小”向量替换,甚至命名为“Vector3”或“Vector2”,例如uBLAS wiki 有效吗?
  3. 你认为我应该为此目的以某种方式实现一个固定大小的向量吗?如果是这样,怎么做?(抱歉,我对 uBLAS 真的很陌生;今天刚试过)
  4. 我正在开发一款 3D 游戏。uBLAS 是否应该用于其中涉及的计算(“嘿,几何学!”,根据 Effective uBLAS wiki)?如果没有,你会建议什么替代品?

- 编辑

以防万一,是的,我已阅读此警告:

应该注意的是,这只改变了 uBLAS 用于 vector3 的存储。uBLAS 仍将使用所有相同的算法(假设大小可变)来操作向量3。实际上,这似乎对速度没有负面影响。上面的运行速度与不使用 uBLAS 的手工制作的 vector3 一样快。唯一的负面影响是 vector3 总是存储一个“大小”成员,在这种情况下是多余的[或者不是吗?我是说......]。

我看到它使用相同的算法,假设大小可变,但是如果操作要实际更改其大小,不应该停止(断言)吗?

哦,拜托,这不就是单纯的背叛吗?

0 投票
2 回答
307 浏览

c# - 将对象链接到列表以供稍后手动编辑(游戏引擎/框架 - 实体管理部分)

首先你好,这是我第一次来这里。我是一名年轻的程序员(15 岁),这是我第二次尝试制作游戏(实际上是整个可重用的游戏引擎和框架,不知道如何称呼它,也许是 GDK?),而这次让它更有条理。

重要提示:我使用的是 XNA 框架,所以游戏引擎不是纯粹的低级 DirectX 管理!我正在尝试使用预定义的类来扩展 XNA,这些类很容易插入到任何游戏中并在以后进行管理!

我一直在寻找一种方法将实体放入 WorldManager 的列表中,然后检索实体以进行直接更改,然后将其放回列表中(因此它与 Update 方法一起使用)。

我的想法(和问题)是:

  1. 最好的解决方案是以某种方式使实体与列表链接,因此当我更新它在列表中更新的唯一实体对象时。不幸的是,我不知道该怎么做,这可能是最好的答案。

  2. 我还想到的是先编辑我创建的实体,然后使用find在列表中查找并更新。问题是我不确定 find 方法是如何搜索的。如果任何更改都可以使方法认为它是一个全新的不同对象怎么办?(find 是如何找到的?)

  3. 我所做的是在将实体添加到列表的那一刻将 ID 添加到实体,这样我可以在编辑后将它们放回原处。问题是我也有 remove 方法,我不确定它是否会更改索引,因为如果会,那么我每次删除实体时都必须重新更新 ID。我觉得效率很低。那么 List<>.Remove 会改变索引吗?(我猜会的)

这些实际上是 3 个问题合而为一,我会很感激回答其中任何一个问题,当然,最重要的问题的答案将更加感激!

一段代码来了解它是如何工作的:

我将如何访问它:

我不使用那段代码,这只是我想法的一个简单示例。

请原谅我令人困惑的英语(如果您觉得它令人困惑),我是塞尔维亚人。

提前致谢。

0 投票
6 回答
673 浏览

c# - 需要一个变量 - 规避 NullReferenceException?

[已解决] - 错误是我的,我没有将 World (world_) 链接到实体,所以它是空的。谢谢大家的解释!


正如您现在可能知道的那样,我正在制作一个游戏引擎/框架,并且我已经卡住了将东西与相互引用联系起来。

例子:

将组件添加到渲染器的行因 NullObjectException 而失败。我的想法是,这是因为它在类实现中(当对象尚未定义时),但这样的事情在下一段代码中起作用:

那部分代码也在 TGSGame 类实现中!

有谁知道我该如何克服这个异常?

0 投票
5 回答
4518 浏览

wpf - WPF<->XNA - 如何结合这两种技术?

我已经在几个地方读过,可以将 XNA 和 WPF 结合起来。我个人需要的是一个游戏/地图编辑器,它实际上就是游戏本身(让引擎在后台运行),因为地图系统会将对象的序列化版本写入 XML,然后再加载。

我的问题是我想要一个标准应用程序,它会在后台运行引擎,并在用户从前端创建游戏资产时创建游戏资产,然后将它们序列化并放入 XML。

这也会派上用场,如果可以从游戏中运行 WPF,对于 UI,如果有人对此有任何经验,如果他/她愿意分享,我将不胜感激。

很快:如何制作 WPF(或 winforms)应用程序,该应用程序在其中一个控件和后台运行 XNA 代码?

0 投票
2 回答
208 浏览

c++ - 如何发现我的应用程序正在使用的 .dll

我正在尝试在我的图形应用程序中使用水晶空间 API。 水晶空间网站

应用程序编译得很好,但我对 dll(动态链接库)感到很困惑。编译的应用程序在运行时崩溃,我怀疑它是因为没有找到所需的 dll。

我目前唯一的解决方案是将我的应用程序可执行文件剪切并粘贴到一个包含所有必要库的文件夹中。(大约 300mb)。

有没有办法可以找出我的应用程序需要的 dll 以便我可以复制它们?(而不是使用所有 dll)

任何帮助将不胜感激。

PS:我正在使用 g++ 和 codeblocks ide

来自德奥博士

0 投票
3 回答
2673 浏览

d - 我正在寻找免费的 D 语言 3d 游戏引擎

在 DevMaster.net 上,我只找到了 RealmForge。这是唯一的选择吗?C/C++ 游戏引擎适合 D 吗?如果是,我需要克服哪些困难才能与他们合作?

0 投票
1 回答
2189 浏览

oop - 模块化游戏引擎的例子?

我发现这是一个非常有趣的阅读: http: //www.devmaster.net/articles/oo-game-design/

作者反复说“哇,如果仔细实施,这可能会很棒。这就是未来!”。嗯,不是很有用。我需要代码,最重要的是,我需要证明这种设计确实有效。

您知道实现本文中提到的一些概念的示例吗?也许一个可以学习的小型开源游戏?或者,至少,一个讨论类似概念的地方?

0 投票
3 回答
591 浏览

multithreading - 忽略平滑变化的浮点值的读写竞争条件是否安全?

当我尝试将游戏引擎的动画更新功能和物理模拟放入单独的线程中执行时,我意识到编写线程(动画,物理)之间的一些浮点值(例如对象的位置)的潜在竞争条件) 和读取线程(渲染器),如果两个线程要同时访问这些值。

我的问题是,考虑到即使浮点赋值也不是原子的,这种读写竞争条件是否会导致读者看到的原始平滑变化值的有线/突然变化?

此外,在我的情况下,我可以容忍少量的错误,因为这样的错误不会在下一个渲染帧中累积。

0 投票
1 回答
619 浏览

winforms - 两个连续的 KeyDown 事件之间的延迟较长

我在写一个小游戏引擎——纯粹是为了了解这些引擎是如何从内部工作的。我目前不想弄乱 OpenGL 或 DirectX,所以我坚持使用 GDI+ 和所有 WinForms 的东西在控件上绘图。

显然,我需要处理输入。更具体地说,键盘事件。然而,这带来了一个问题:

这段代码(即使在控制面板的键盘小程序中设置了最短的重复延迟)会产生以下结果:

如您所见,有 0.25 秒。前两个事件之间的延迟。很明显,这会导致屏幕上的对象移动缓慢:它首先稍微向右移动,然后暂停一段时间,然后继续。

我该如何解决这个问题?这可以在纯 WinForms 中完成,还是我应该使用 DirectInput(或者现在的犹太洁食方式?)路线?

0 投票
2 回答
15194 浏览

php - 寻找 php 游戏引擎/框架

我正在寻找 php 游戏引擎/框架。免费或便宜,最好是开源的(但这不是必需的)。如果没有类似的东西,我会修改一些开源游戏......

我非常喜欢《绿龙传说》(简单但有趣的游戏:),但它的使用条款非常有限——它们不允许您在游戏中放置广告、将捐赠按钮更改为贝宝以外的其他东西等。 .