游戏开发

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

3
轮廓精灵
我目前正在开发2D游戏,目前的任务是勾勒出选定的对象。 我基本上使用模糊着色器来完全运行它。我首先使用垂直高斯模糊着色器绘制精灵,然后使用水平高斯模糊着色器绘制精灵,然后正常绘制我的精灵。 这是我的模糊着色器:sampler TextureSampler:register(s0); #define SAMPLE_COUNT 15 float2 SampleOffsets[SAMPLE_COUNT]; float SampleWeights[SAMPLE_COUNT]; float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR0 { float4 c = 0; // Combine a number of weighted image filter taps. for (int i = 0; i < SAMPLE_COUNT; i++) { c += tex2D(TextureSampler, texCoord + SampleOffsets[i]) * SampleWeights[i]; …


1
如何在Unity3D中遮挡灯光?
首先,我拥有Unity Pro。 我一直在寻找遮挡灯光的方法,现在已经有一段时间没有出现了,以提高性能。我遇到的主要方法是使用BecameVisible()并测试相机的视锥。 我的主要问题是,如果玩家正在观看一个被灯光照亮的区域,我仍然希望该灯点亮。 目前,我正在使用一种方法来检查照明区域是否在相机的视锥中,但是问题是有时视锥中的光没有被玩家实际看到(例如,玩家与玩家之间的墙)。我已经尝试过对它们进行光线投射,但是对于实际的照明区域,您永远无法获得足够的详细信息(我能想到的最好的方法是使用renderer.bounds.extent和renderer.bounds.center来计算灯光的最大照明点)。 有谁知道Unity Pro中遮挡灯光的简单方法吗?还是您能告诉我一种使用我正在谈论的相机支点方法的好方法?

2
顺畅地走一条路
我目前正在制作2D塔防游戏,该游戏具有敌人预定的固定且预定的静态车道(即,塔无法阻挡路径,而寻找路径并不是我要解决的问题)。 我试图弄清楚如何使单位以一种顺畅的方式沿着这条车道行驶。对于如何执行此操作,我有两个粗略的想法,但我希望可以提供一些可能更容易实现/更标准的技术的意见。或者,当然,如果我有一种完全不同的方式,但我从未想到过,我也想学习一下。 航点: 我的第一个想法是将路径定义为一系列硬编码的航点。然后,部队将使用一种基本的“搜寻”操纵算法(例如该操纵算法)沿路径依次移动到每个航路点。但是,我想知道是否可能很难阻止这些单位偏离我希望他们遵循的车道。我想知道是否无法足够迅速地转弯会导致他们在期望的车道上出现某种“滑行”。我想虽然可以通过施加相对较大的转向力来防止这种情况发生? 贝塞尔曲线: 我考虑过的第二个解决方案是用贝塞尔曲线定义路径,并在每个时间步计算沿曲线的点的距离(dt *速度)远离设备当前位置。我怀疑这种技术会使精确定义单元将遵循的路径变得容易得多,但是我不知道如何确切地实现这一目标。有什么建议么? 另外,我不认为这会改变任何人的答案,但是单位也必须能够以恒定的速度沿路径行驶。另外,我正在使用pyglet框架在python中对该游戏进行编程。 如果不清楚这个问题,请告诉我。 编辑:同样,无论其价值如何,我都在尝试复制“ 王国拉什”中敌人的移动行为。

2
编写服务器时如何拆分登录和游戏逻辑?
我正在构建一个像游戏服务器这样的扑克,我打算将所有登录名和游戏逻辑都在一个服务器上进行处理,但是从我在网络上的研究中,我了解到这无法扩展,因此拆分是有意义的工作进入登录和游戏服务器。但是,我在登录服务器中处理了身份验证并让客户端与游戏服务器建立了新的连接后,却没得到什么,我怎么知道哪个客户端是哪个?我是否不必再次重新登录并因此而放弃使用服务器进行登录的目的?有没有办法在我不知道的进程和机器之间传递连接?对不起,我对网络的了解很少。

2
D3D / DXGI处理全屏过渡
我有一个D3D11应用程序,我想添加适当的全屏支持。现在,我可以让DXGI为我将窗口切换到全屏状态,并且给人的印象是DXGI会处理使交换链翻转前后缓冲所需的一切,而不是消隐它们。 但是,在多监视器设置中,让DXGI执行切换似乎不可靠-切换大量时间后,辅助屏幕完全保持黑色,没有明显的原因或模式。 它可以采取几次来回切换之前,我全屏窗口和桌面的其余部分显示的其他屏幕上。 显然我并不孤单,《战地风云3》和《魔兽世界》似乎对很多人都有类似的问题。 现在,真正的问题是:我猜想,即使是那些AAA游戏开发公司也无法做到这一点,所以我最大的希望是自己以某种方式执行全屏切换。 我有什么办法可以将窗口/交换链提升为适当的,缓冲区翻转的全屏模式?

2
如何在关卡编辑器中可视化视差图层?
我正在Unity中制作2D游戏,但这将适用于任何2D游戏引擎。 如果我使用正交摄影机实现多平面视差,则很难对背景图层的子画面进行布局,并知道它们将与其他图层中的子画面对齐的位置。 我的第一个直觉是使用多个摄像头,每个摄像头一个,然后为背景图层缩小摄像头的移动速度。这样避免了每帧都必须移动所有背景精灵。问题在于,在编辑器中查看时,以一半速度移动的图层将占用主图层的一半空间。因此,在布局游戏时,很难知道将子图形放置在何处。随着增加层数,该问题将成倍恶化。 我该如何解决?在编辑器中使用图层时,我曾尝试根据图层的预期移动速度对其进行逆缩放。这会将所有背景精灵放置在相对于主图层的正确位置,但是它们却被严重扭曲了。 我是否需要吸收它并不断在编辑器和正在运行的游戏之间切换以测试视差背景?

1
基于组件/实体的设计+行为树=>如何集成?
在我当前的项目中,我实现了一个基于组件/实体的系统,基本上遵循了大多数最佳实践,但是这个未定义的领域却存在。 因此,我得到了(略微扩展的)实体,它们基本上是一个intID,一个人类可读的名称,一个std::map组件和一个long“类型指示符”,用于显示存在哪些组件(我enum对所有组件有2的幂类型,并且每当将一个组件添加到Entity时,我都会通过按位操作自动更改该长度,比较此答案)。 然后是Components,也很简单:intID,enum作为组件类型,父Entity指针以及std::map该组件拥有的所有属性。 最后,一些处理实际逻辑处理的系统/管理器。他们首先检查当前处理的实体是否具有匹配的long“类型指示器” =该系统的所有必需组件都已存在。然后,如果需要,它将访问一些属性,并直接调用相应组件中的某些函数或发送一些消息(通过消息分发程序)。 底线:到目前为止,一个相当标准的事件驱动的基于组件/实体的系统与数据驱动的方法相结合(比较,组件没有硬编码的数据变量,而是作为(某些)组件的通用映射组件的/ archetypes将在以后从文件中读取,并且可以选择添加其他数据,这不是实际组件代码的一部分。 现在,我还要在该项目中引入“ 行为树”(基于AiGameDev BTSK),但是我不确定是否以及如何将它们链接到现有组件,或者通常如何集成这些设计。 我想到了几个相关的想法/观点/问题: 我的BT将再次从文件中读取。目前,我很难理解如何最好地BT Action在该树中的a和应用程序中的实际编码之间建立联系。是否应该在BT文件中使用的动作名称和指向实际逻辑实现的函数指针之间建立某种映射?解决该问题的通常方法是什么? 我假设我必须为所有不同Entity类型创建BT (因此,对于我多次提到的长“类型指示器”所指示的每种与游戏逻辑/人工智能相关的组件组合)。结果,将BT Action实现放入组件中没有意义,因为每个动作很可能会涉及许多组件,不是吗? 那么BT Action逻辑是否应该位于一个/多个单独的系统中(想法1的映射所指向的系统指向的方法)?然后,系统将根据我的long“类型指示器” Entity检查当前是否已检查BT并被告知执行特定操作(=系统中的方法)的BT(实际上具有必需的组件)。但是,如果不是这样(例如,因为BT创建者确实忽略了特定情况,即在运行时可能不再将必要的组件附加到Entity),则什么都不会发生。 问题: 是否有经过验证的集成概念? 您对我上面的三点有何看法? 在我的基于组件/实体的设计方面,还有其他需要考虑的事情吗?


1
GPU与CPU上的网格处理
只是有点好奇-您在CPU或着色器中的哪里执行网格处理?我一直在做CPU上的所有事情,一位朋友建议将其移至GPU端。 如果您在GPU上执行骨骼动画之类的操作,如何获得网格?(因为我正在进行碰撞检测...)
9 opengl  3d 

3
Steam Greenlight的优点
假设我可以选择一个相当不错的游戏,进行构建,并使用足够的镀铬层完成游戏;我们还假设我可以通过自己的网站在一定程度上推销自己。 通过Steam Greenlight到底有什么优势?假设我实际上可以完成整个过程并达到足够的临界质量,从而成为“ Greenlight”。您是否知道通常成品,打磨过的镀铬游戏会变成“绿色”?从统计上看,绿灯是否与商业成功或更高的销售额相关? 顺便说一句,我假设我的市场营销很糟糕,而且Steam通常会为您吸引一些眼球和销售。

4
为什么我应该使用单独的初始化和清理方法,而不是将逻辑放入引擎组件的构造函数和析构函数中?
我正在开发自己的游戏引擎,目前正在设计经理。我已经读过,对于内存管理,使用Init()和CleanUp()函数比使用构造函数和析构函数更好。 我一直在寻找C ++代码示例,以查看这些功能如何工作以及如何将其实现到引擎中。如何Init()和CleanUp()工作,我如何能实现他们进入我的引擎?

2
使用射线投射在二维网格上实现视线的更有效方法?
考虑一个2D的瓷砖网格,以及一个以视线为中心的近似坐标范围(以玩家为中心)。目标是将视线挡在障碍物(即墙)之外。 确定视野中是否有单个单元格是相对简单的:使用布雷森汉姆将光线从玩家投射到目标单元格-如果玩家和目标之间的重叠单元之一是障碍物,则目标单元格不可见。 现在,我的第一个想法是遍历视线中的所有网格单元-但这对我而言似乎效率很低。例如,如果玩家站在墙旁边,并且确定不可见墙外的单元,则可以确定射线之后的所有单元都不可见。 还考虑过将射线投射到视线范围内的每个单元格,然后沿着每个射线迭代每个单元格-但是我将不止一次处理一些单元格。 有更有效的方法吗? 虽然每圈迭代〜50个单元格是一个相对轻量级的计算,但我追求速度-目标是能够在自动播放中每秒循环几圈。因此,我可以做得越高效越好。

2
从Rectangle.Intersects()获取碰撞详细信息
我有一个Breakout游戏,在该游戏中,有时会通过以下方式检测到球和桨之间的碰撞: // Ball class rectangle.Intersects(paddle.Rectangle); 有什么办法可以获取当前碰撞的确切坐标或有关碰撞的任何详细信息XNA API? 我考虑做一些基本的计算,例如比较碰撞时每个物体的精确坐标。它看起来像这样: // Ball class if((rectangle.X - paddle.Rectangle.X) < (paddle.Rectangle.Width / 2)) // Collision happened on the left side else // Collision happened on the right side 但是我不确定这是正确的方法。 你们对我可能要使用的引擎有任何提示吗?甚至使用这种方法的良好编码习惯?

3
避免在追求转向行为中绕轨道行驶
我有一枚确实具有追捕行为的导弹,可以追踪(并试图影响)其(静止)目标。 它工作正常,只要你不扫射,当你发射导弹。如果您在进行攻击,导弹会趋向其目标飞行。 我先通过切向加速到目标,先杀死速度的切向分量,然后对目标进行弯腰来解决此问题。 因此,我在-vT中加速直到vT接近0。然后在vN方向上加速。 在此可行的同时,我正在寻找一种更优雅的解决方案,使导弹能够在不首先杀死切向分量的情况下撞击目标。

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.