游戏开发

专业和独立游戏开发人员的问答

5
如何创建一个新的GameObject,而不将其添加到场景中?
我正在创建本质上是我自己的预制系统。游戏对象是由人类可读的数据文件定义的。我想创建一个空的GameObject,将其加载到数据文件中定义的组件中,并准备好等待Instantiate()调用。但是,每当我使用GameObject go = new GameObject()新游戏对象时,都会将其添加到场景中。 使用内置在预制件中的Unity,我可以将预制件作为GameObject加载,并且不会将其添加到场景中。(请参见下面的示例) 这背后的基本原理是我希望有一个包含GameObjects的列表,其中一些是通过加载Unity预制件生成的,而另一些是由我的自定义预制系统创建的。这需要在运行时发生,并且不能涉及Unity编辑器(因为理想情况下,最终用户将能够定义自己的数据文件)。 如何创建一个新的GameObject,而Unity却没有自动为我实例化它? 例如,我可以这样拨打电话: Resources.LoadAll("PrefabsDirectory", typeof(GameObject)) 然后,我将获得一个GameObjects列表,在进行调用时,这些列表都不会添加到场景中。本质上,我正在LoadAll为自己的预制件创建方法,同样,我不想在调用时实例化GameObjects。

1
形状(矩形)如何在四叉树中工作?
有人告诉我,四叉树是我的游戏的理想数据结构,但是我在理解形状在四叉树中的工作方式时遇到了麻烦。 我正在用JavaScript进行此操作,但我认为这些问题可能适用于任何语言的四叉树。 我想我最了解基本(x,y)点和点插入在四叉树中的工作原理,并且我可以在纸上做到这一点。 这是我尝试点的JSfiddle。 除了一个案例,我的分数测试按预期进行。 但是,当涉及矩形等形状时,我的困惑就开始了。当从具有形状的四叉树中检索时,它会检查形状的每个点以及它们落入哪些节点?当形状插入接受每个形状的(x,y,width,height)参数时,形状插入甚至如何工作?它是否使用起点的宽度/高度来计算其他角点,然后将其分配到适当的节点中?如果插入的形状跨越四个节点,该形状的数据是否保存到所有四个节点中? 当检索方法接受形状作为参数(x,y,width,height)时,实际上是怎么回事?是否首先查看形状要插入到哪个节点,然后检索这些节点的所有对象? 我有一个使用shape的JSfiddle,但是我对测试结果完全感到困惑。我正在收到重复的对象! 例如,红色方块等效于我输入到检索方法中的参数。我认为,由于这个红色正方形跨越了所有四个节点,因此它应该返回四叉树中的每个对象!但事实并非如此,而且我在合理化返回结果方面遇到了麻烦。目前,我还有许多其他测试已被注释掉,但是您可以取消注释并运行它们以查看更令人困惑的结果! 就像说,如果我想返回四叉树中的所有点,我该怎么做?使用形状的整个边界范围的检索方法?例如,retrieve(0,0,canvas.width,canvas.height)? 我正在使用的JavaScript QuadTree库已被其他各种来源引用,因此,我认为实际的实现是正确且信誉良好的。 我认为我的许多困惑可能源于对四叉树术语的误解。就像,为什么当“点”也具有width / height参数时,为什么用边界而不是尺寸?是约定俗成的问题还是它们的完全不同的概念? 谢谢你的时间!

1
精灵表纹理拾取相邻纹理的边缘
我有一个自定义的精灵例程(openGL 2.0),该例程使用一个简单的精灵表(我的纹理彼此水平排列)。 因此,例如,这是一个带有2个简单纹理的测试精灵表: 现在,我在创建openGL Sprite对象时要做的就是在其图集中指定帧的总数,并且在绘制时指定要绘制的帧。 然后计算出从何处获取纹理的方式: 将所需的帧数除以总帧数(以获得左坐标) 然后将1除以总帧数,然后将结果加到上面计算出的左手坐标上。 这似乎确实有效,但有时会遇到问题。比如说,我想在下面画X,我得到........... 我听说过在每个纹理之间放置1 px的“填充”,但是有人可以确切解释它是如何工作的吗?我的意思是,如果这样做,它肯定会取消获得纹理的计算。 如果我简单地在所拾取的纹理中包括填充(因此使用空白边框绘制精灵),那么这肯定会导致碰撞检测问题吗?(即,当透明零件发生碰撞时,使用边界框时,精灵可能会发生碰撞)。 如果有人可以解释,将不胜感激。

6
如何在基于数组的十六进制贴图上获取像素到十六进制的坐标?
我正在尝试使一个像素能够协调十六进制贴图的功能,但是我没有正确地获得数学运算,我尝试的所有内容似乎都有些偏离,并且我发现的示例均基于以圆心为中心的贴图。 “基于数组”是指十六进制的排序方式,请参见图片。 我得到的最准确的结果是使用以下代码,但是仍然不可用,并且值增加的越多越糟: public HexCell<T> coordsToHexCell(float x, float y){ final float size = this.size; // cell size float q = (float) ((1f/3f* Math.sqrt(3) * x - 1f/3f * y) / size); float r = 2f/3f * y / size; return getHexCell((int) r, (int) q); } 屏幕从左上角的0,0开始,每个单元格都知道其中心。 我需要的是一种将屏幕坐标转换为十六进制坐标的方法。我该怎么办?

3
有关C ++中实体组件系统之间链接的建议
在阅读了有关实体组件系统的一些文档之后,我决定实施我的。到目前为止,我有一个World类,其中包含实体和系统管理器(系统),Entity类(其中包含作为std :: map的组件)以及一些系统。我在世界中将实体作为std :: vector持有。到目前为止没有问题。让我感到困惑的是实体的迭代,我对此一无所知,所以我仍然无法实现这一部分。每个系统都应该保存他们感兴趣的实体的本地列表吗?还是应该仅遍历World类中的实体并创建一个嵌套循环以遍历系统并检查实体是否具有系统感兴趣的组件?我的意思是 : for (entity x : listofentities) { for (system y : listofsystems) { if ((x.componentBitmask & y.bitmask) == y.bitmask) y.update(x, deltatime) } } 但是我认为,在嵌入脚本语言的情况下,位掩码系统会带来一定的灵活性。或者为每个系统使用本地列表将增加类的内存使用量。我非常困惑。


4
如何处理不同的键盘布局?
假设我有一个在QWERTY布局上使用WASD控件的游戏。例如,尝试在Dvorak布局上使用这些控件并不理想(等效<A:H于QWERTY)。显然,我想使用与QWERTY相同的物理键(,aoe在DVORAK上。 我提出了一些可能的解决方案: 强制用户使用QWERTY 显然不理想,特别是对于国际用户 根据键盘布局更改快捷方式(WASD->,aoe) 强迫我为每个受支持的布局制作布局图(可自动化) 如果快捷方式不只是WASD,对于用户来说最容易 强制用户自己定义快捷方式 更灵活 烦人的快捷键是否很多 可与第二个选项结合使用 使用硬件键码 跨键盘一致吗? 通常如何处理这类事情?
10 keyboard 

2
如何从转换矩阵中提取方向?
我有一个4x4的转换矩阵M,我想找出通过M转换后的球体的形状。(球体在原点,半径为1。) 我知道只要将M乘以(0,0,0,1)就可以找到中心。 但是,由于M可以挤压和旋转球体,因此半径成为问题。如何找出所得椭球的新半径?有什么办法找出方向吗? 更具体地说,我需要知道包围转换后的球体的边界球体的大小。换句话说,| M * V-M *(0,0,0,1)|的最大值是多少,其中V是单位矢量(原始球体上的一个点)。

3
优雅的自动平铺
我正在寻找有关人们如何在基于图块的游戏中实现自动平铺的信息。到目前为止,我总是用一堆硬编码的“ if ... else ...”语句来即兴创作,现在我决定是时候找到一些更优雅的解决方案了。我在Internet上搜索了有关该主题的实现示例和讨论的示例,但我只想出了三篇文章: http://www.codeproject.com/Articles/106884/Implementing-Auto-tiling-Functionality-in-a-Tile-M http://blog.rpgmakerweb.com/tutorials/anatomy-of-an-autotile http://web.archive.org/web/20130927193449/http://www.squidi.net/mapmaker/musings/m091016.php (特别是最后一个是全面的,非常有帮助。) 我还研究了各种实现和库的文档,例如flixel:http ://www.flixel.org/features.html#tilemaps 可悲的是,我所能找到的所有解决方案与我刚开始时一样,都是即兴且偶然的,几乎从来没有涵盖所有可能的情况。 我正在寻找可以从中学习的自动平铺实现的优雅示例。

12
如何防止记忆修改作弊?
如今有许多更改内存的程序(Cheat Engine&co)。有没有办法保持恒定的可变的有效方式实际上不变? 我有两个想法: 制作一个单独的线程,将常数变量更新为常数值,例如每分钟200。问题:一个值也可以更改第二个值。 将值存储在服务器上。问题:我想保持网络流量尽可能低。 对于只允许包含一定范围值的常量和变量,我都需要这种机制。 有更好的方法可以做到这一点吗?
10 anti-cheat 


3
与全状态更新相比,我如何更有效地同步多人游戏状态?
我之前已经做过一些游戏网络编码,但是主要使用TCP来实现无实时需求的游戏。我正在使用网络多人游戏开发2D Java游戏。为了学习,我想自己做,而不需要现有的网络API。 如何有效表示从服务器发送给客户端的游戏状态?有一种最明显但可能效率最低的方法,该方法是使用每个玩家的位置,动画状态等创建某种游戏状态上下文对象,并将每次更新发送给每个玩家。这似乎很难实现,但可能太大而无法实现接近实时交互的功能(当然,我的经验有限,因此我可能是错误的)。 你们中的任何人以前是否曾使用过可靠的方法来仅传输状态变化,并且在性能上是否存在足够大的差异以值得进行额外的工作?

1
如何反转背景像素的颜色
我正在使用Java和jMonkeyEngine编写游戏和地图编辑器。在地图编辑器中,我已通过线框球体完成了笔刷。我的问题是:我想使它在任何地方都可见,因此我想反转此笔刷“后面”的像素的颜色。我想用片段着色器(GLSL)来做,但是我不知道如何获得该像素的颜色。

2
如何实现发动机零件之间的相互作用?
我想问一个问题,如何实现游戏引擎各部分之间的信息交换。 引擎分为四个部分:逻辑,数据,UI,图形。一开始我是通过标志进行这种交换的。例如,如果将新对象添加到数据中,则isNew对象类中的标志将设置为true。之后,引擎的图形部分将检查此标志,并将对象添加到游戏世界中。 但是,使用这种方法,我要编写很多代码来处理每种对象的每个标志。 我曾考虑使用某种事件系统,但是我没有足够的经验来知道这是否是正确的解决方案。 事件系统是唯一合适的方法,还是我应该使用其他方法? 如果重要的话,我正在使用Ogre作为图形引擎。
10 c++  architecture 

2
如何测试一个点是否位于两条平行线之间?
在我设计的游戏中,爆炸会从起点向鼠标方向发射。爆炸的宽度始终是相同的。 沿着屏幕底部(当前是什么)移动的方格应该受玩家控制的爆炸影响。 目前,我正在尝试寻找一种方法来发现这些正方形的角是否在爆炸的两条边界线之内。我认为最好的方法是围绕原点旋转正方形的角,好像爆炸完全处于水平状态,然后查看拐角的Y值是否小于或等于爆炸的宽度。表示它们位于受影响的区域内,但我无法解决

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.