游戏开发

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

4
法线贴图如何真正起作用?
我试图理解法线贴图的概念,但是我对一些事情感到困惑。简而言之,我不确定法线贴图是否依赖于视点(即,围绕同一对象旋转时是否会得到同一对象的不同法线贴图)。其次,我不明白为什么蓝色是法线贴图中的主要颜色。 我如何看待法线及其与RGB颜色的关系,如下所示。单位球体表示任何可能的单位法线-换句话说,单位法向向量的X,Y和Z分量的范围是-1至1。RGB颜色的分量的范围都是0至255。因此,这很有意义将-1(标准分量)映射到0(颜色分量),0到127或128以及1到255。介于两者之间的任何值都只是线性插值。 将此映射应用于任意3D对象的法线会产生非常彩色的图像,而根本不是蓝色。例如,当取一个立方体时,所有六个面将具有不同但均匀的颜色。例如,法线为(1,0,0)的脸将为(255,128,128),法线为(0,0,-1)的脸将为(128,128,0),依此类推。 但是,由于某种原因,我找到的多维数据集的法线贴图完全是蓝色的,即(128,128,255)。但很明显,法线并非全部在正z方向上,即(0,0,1)。这是如何运作的? [编辑] 好的,因此上述方法似乎被称为对象空间法线贴图或世界空间法线贴图。另一个称为切线法线贴图。我了解如何使用这种切线空间法线贴图来修改几何体的法线,但是我仍然不确定完全如何计算它(请参阅我在Nicol Bolas的回答中的评论)。 [编辑2] 我可能应该提到我正在处理分段参数化曲面。这些表面由一组表面补丁组成,其中每个补丁都与其自己的参数空间(u,v)= [0,1] x [0,1]相关联。可以在表面的任何一点上精确计算法线。显然,跨越切线空间所需的向量T(切线)和B(双切线)不仅仅是在u和v方向上​​表面补丁的偏导数。

4
识别实体组件系统中的实体“类型”
如果实体没有显式的“类型”(例如播放器),而仅仅是组件的集合,那么我如何识别系统应该和不应该使用的实体?例如,在Pong游戏中,桨和球都与窗口边界碰撞。但是,每个碰撞处理系统将有所不同,因此系统不应处理错误类型的实体。 void PlayerCollisionSystem::update(std::vector<Entity *> entities) { typedef std::vector<Entity *>::iterator EIter; for (EIter i = entities.begin(); i != entities.end(); ++i) { Entity *player = *i; // How do I verify that the entity is a player? // Get relevant components. PositionComponent *position = player->getComponent<PositionComponent>(); VelocityComponent *velocity = player->getComponent<VelocityComponent>(); SpriteComponent *sprite = …

6
只要注明作者的原著,就可以在其作品中使用某首歌曲吗?
我正在开发一款商业游戏,因此我希望在赠送时使用某首歌曲,因为它非常适合我的特定游戏。 我知道使用游戏中其他人制作的音乐可能是非法的,但这是相当小的事情,而且我想知道,只要我相信他,使用他的其中一首歌曲是合法的(我了解大多数人不是律师,但可以肯定的是您可以提供一些例子或提供可靠的建议)
10 music  copyright 

1
如何模拟box2d中的羽毛掉落?
我正在使用具有Box2d扩展名的AndEngine,但是一般的回答或概念性想法也将受到赞赏。 我希望在2D侧视图世界中有类似羽毛的对象,因此希望成为物理模拟的一部分。我正在使用线性阻尼使“羽毛”缓慢下降。这可能不是一个好主意,也许我应该在每次更新中都施加一些力,但是尽管如此,它仍然有效,并且使对象看起来“轻盈”,并且感觉好像空气中有阻力。 现在如何使物体看起来像羽毛一样从空中掉下来? 具体来说,我正在寻找两种类型的物体:低密度的长物体,应以缓慢的摆动向下移动,以及会随机改变轨迹的方形物体。如果这可以是一种模拟,并且长度可以作为参数,那就太好了-对象越长,摆动就越大。现在,我想在卡通世界中模拟羽毛,树叶和雪花。
10 box2d  physics 

3
如何在实体组件系统中避免“斑点系统”?
目前,我面临以下问题: 我正在尝试通过使用实体组件系统(ECS)来编写pong克隆。我自己写了“框架”。因此,有一个类管理具有所有组件的实体。然后是组件类本身。最后是我的系统,它仅获取具有系统所需组件的所有实体。 因此,例如,我的运动系统会查找具有位置分量和运动分量的所有实体。位置分量仅保持位置,而运动分量则保持速度。 但是实际的问题是我的碰撞系统。这个类就像一个逻辑blob。我在这堂课上有很多特殊情况。 例如:我的桨可能会与边框碰撞。如果发生这种情况,其速度将设置为零。我的球也可能与边界碰撞。但是在这种情况下,它的速度仅反映在边界的法线上,因此可以反映出来。为此,我给球添加了一个额外的物理组件,它告诉:“嘿,这件事并没有停止,它反映了这一点。” 因此,实际上,物理组件没有实际数据。它是一个空类,仅用于告诉系统对象是否反射或停止。 然后是这样:当球与球拍或边框碰撞时,我想渲染一些粒子。因此,我认为球必须具有另一个组件,该组件告诉碰撞系统在碰撞时创建粒子。 然后,我想要一个可以与桨碰撞但不能与边界碰撞的力量提升器。如果发生这种情况,通电将消失。因此,我需要更多的情况和组件(以告诉系统某些实体只能与某些其他实体发生碰撞,即使某些其他实体确实可以发生碰撞,机器人也不能与所有实体发生碰撞,此外,碰撞系统还必须对这些实体施加动力桨等,等等。)。 我看到实体组件系统是一件好事,因为它很灵活,并且继承没有问题。但是我现在完全陷入困境。 我觉得太复杂了吗?我该如何应对? 当然,我必须创建实际上负责“碰撞后”的系统,因此碰撞系统只会告诉“是的,我们在最后一帧发生碰撞”,然后有许多“碰撞后”系统所有这些都需要不同的(组合)组件,然后更改组件。例如,将有一个运动后碰撞系统,该系统停止发生碰撞时必须停止的东西。然后是一个反映事物等的物理后碰撞系统。 但这似乎也不适合我,因为例如: 我的运动碰撞后系统将需要具有位置分量,运动分量和碰撞分量的实体。然后,它将实体的速度设置为零。 物理后碰撞系统将需要具有位置成分,运动成分,碰撞成分和物理成分的实体。然后它将反映速度矢量。 问题很明显:运动后碰撞需要实体,这些实体是物理后碰撞系统中实体的子集。因此,两个碰撞后系统将对相同的数据进行操作,其结果是:尽管实体具有物理成分,但碰撞后速度为零。 这些问题一般如何在实体组件系统中解决?这些问题甚至很常见吗?如果是,那么应该怎么做以及如何做呢?

2
UDK:检查弹丸ProcessTouch中的actor类型
因此,简单来说,当一个被投射物击中(或被游戏中的任何武器损坏)的棋子时,我试图将其传送。 现在,我试图在弹丸的ProcessTouch中仅调用Pawn.SetLocation。这是一个问题,因为ProcessTouch会击中任何演员,而不仅仅是典当。此外,任何检查ProcessTouch的“其他演员”的尝试都将引发错误。 我尝试了很多解决方案(包括在Pawn控制器类中创建事件TakeDamage),但无济于事。 simulated function ProcessTouch(Actor Other, Vector HitLocation, Vector HitNormal) { if (Other != Instigator) { //This is where the Other.TakeDamage goes if we are using a traditional gun. if (Other == Pawn); { Other.SetLocation(0,0,0); } } Destroy; } 此代码抱怨Pawn的表达不正确。我还应该在这里如何检查演员类型?
10 udk 

1
程序几何生成
我最近一直在研究OS X的SceneKit,并注意到有几种工厂方法可以创建几何形状,例如: 框,胶囊,锥,圆柱,平面,金字塔,球体,圆环和管。 我有兴趣在我的渲染器中添加这样的原始形状,但是我一直在努力寻找任何合理的来源,从中我可以收集对程序生成的理解。有许多资源详细介绍了该理论,但是缺少适当的源代码来对其进行备份。 SceneKit提供了工厂方法,该方法允许动态设置此类形状的属性。对于Box,可以为每个面应分为的宽度,高度和深度段数提供整数值。 我了解理论,但缺乏知识来开始细分几何面以实现所需的效果。 每个形状的顶点很可能很容易在简单的循环中生成。让我感到困扰的是,我知道如何创建这些面,或者是为每个面创建适当的纹理坐标。可以按每张面孔计算法线,因此我很自信可以实现自己想要的目标,只是知道从哪里开始。 谁能提供有关程序几何的任何详细信息?我真正需要的是一些源代码来收集一些信息。我在教程中搜索了很多内容,但到目前为止,只提出了一些合理的站点或博客。任何优秀的书籍,教程,博客或研究论文将不胜感激。 根据评论进行编辑 我应该澄清的是,我知道如何为基本形状创建顶点,其中大多数可能可以通过简单的循环来实现。我不理解的是如何从生成的顶点数组创建面。如何从看似无序的顶点阵列中创建一个或多个三角形带? 我假设一旦超过了这一点,就可以从每张脸创建法线。尽管我还没有深入研究,但是我已经看到了很多对此的参考,并且确信它很容易实现。 理想情况下,我希望能够从一组给定的属性(例如SceneKit提供的方式)生成几何。鉴于SceneKit已经做到了,并且您可以在Blender和Maya等中做类似的事情,我想我不是在尝试实现不可能的事情。 最后一个方面是应用纹理。再说一次,这不是我实现的,但是已经阅读并了解了需求。 这里的主要问题是我知道我想要实现什么,但是正在努力解释如何为上述原语实现。我希望能够通过源代码找到一些相似的知识,但是到目前为止,我确实还没有遇到任何合适的东西。


2
Java 2D游戏编程:制作游戏循环的不同方法
我是Java游戏编程的新手,但是我阅读的内容越多,我就越困惑,因为我已经看到了制作游戏循环的几种不同方法:1.使用Timer类的标准方法(似乎要少一些)精确)。2.使用System.nanoTime的更精确的方法。3.使用scheduleAtFixedRate的简单方法。 通常应首选哪种方法,每种方法的优缺点在哪里?在此先感谢您的任何信息。

2
用已知队列优化对战游戏的算法
我正在尝试用C#.NET为称为Flowerz的游戏编写求解器。作为参考,您可以在MSN上播放它,请访问:http: //zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz。我在写它只是为了好玩,而不是为了任何类型的作业或任何与工作相关的事情。因此,唯一的限制是我的计算机(具有8GB RAM的Intel i7内核)。就我而言,它不需要在其他任何地方运行。 简而言之,其规则如下: 有一个装满彩色花朵的队列。它的长度是任意的 队列不受影响 队列在级别开始时生成 花有一种或两种颜色。 如果有两种颜色,则有外部颜色和内部颜色。在两种颜色的情况下,外部颜色用于匹配。 如果匹配,则外部颜色消失,花朵现在是与内部花朵颜色相同的单色花朵 游戏的目标是创建三个(或更多)相同颜色的比赛 当单色的花朵是火柴的一部分时,它会从运动场上移开,从而创建一个空白空间 您可以将单色花朵与双色花朵的外部颜色进行匹配。在这种情况下,单色花消失,两色花的外部颜色消失而内部颜色保留 当队列为空且剩余至少一个空白处时,您将赢得回合 级联匹配是可能的。级联是指三朵(或更多)外花消失,而它们的内在颜色又形成了三朵(或更多花)链。 比赛场地始终是7x7 田野上的一些空间被岩石覆盖 你不能在岩石上放花 队列还可以包含一个小铲,您可以使用该小铲将任何放置的花朵移至空闲空间 您必须使用铁锹,但实际上不必移动花:将花从原位放回原处是完全合法的 队列中还可以包含彩色蝴蝶。当您在花朵上使用这只蝴蝶时,花朵会得到蝴蝶的颜色 将蝴蝶应用于具有两种颜色的花朵,导致花朵仅获得一种颜色,即蝴蝶的颜色 您可以将蝴蝶浪费在已经有这种颜色的空白处或花朵上 清除场地并不能赢得比赛 求解器的目标很简单:找到一种清空队列的方法,在运动场上保留尽可能多的剩余空间。基本上,人工智能为我玩游戏。求解器的输出是包含找到的移动的列表。我对得分不感兴趣,但对生存时间越长越感兴趣,因此我对留下尽可能多的空地的动作感兴趣。 不用说,队列越大,搜索空间就会迅速增长,因此就不会有暴力行为了。如果我没记错的话,队列从15开始,每两到三个级别以5增长。而且,当然,将第一朵花放在(0,0)上并将第二朵花放在(0,1)与将第一朵花放在(1,0)和第二朵花(0,0)上是不同的,尤其是当早先的一轮花已经充满了田野。这样简单的决定可能会有所不同。 我的问题如下: 这是什么问题?(请考虑旅行推销员,背包或其他组合问题)。知道这一点可以使我的Google-fu更好。 哪种算法可以快速给我带来良好的效果? 关于后者:最初,我尝试编写自己的启发式算法(基本上:如果我知道队列,该如何解决?),但这会导致很多边缘情况和得分匹配,而我可能会错过这种情况。 我当时在考虑使用遗传算法(因为我至少知道如何使用它...),但是在确定板的二进制表示时遇到了一些问题。然后是交叉问题,但是可以使用有序交叉算子或类似类型的操作来解决。 我的猜测是,求解器必须始终知道电路板配置和它要清空的队列。 我知道其他一些启发式算法,例如神经网络和模糊逻辑系统,但是我缺乏经验,无法知道哪种算法最适用,或者是否还有其他算法更适合手头的任务。
10 c#  algorithm  ai  puzzle 

3
如果同时使用MonoGame API和基础图形API,会发生什么问题?
如果他们使用MonoGame进行游戏并开始对基础图形API进行调用,会遇到什么问题? 例如,如果我想在MonoGame项目中做某些事情,而MonoGame不一定支持该项目,或者我只是找不到合适的文档/示例,但是我可以找到一个在OpenTK中进行操作的示例,是吗?如果我在其他地方都使用MonoGame API时直接使用OpenTK实现它,是否会给自己带来麻烦?具体来说,我正在寻找是否有已知的大问题是由这种情况引起的,而不是在极少数情况下会发生的晦涩难懂的事情。 我尝试通过Google和GD.SE网站本身进行一些研究,但找不到很多。也许MonoGame确实涵盖了它的大部分基础,但是如果我手动想解决它的一个突出问题或尚未实现的功能该怎么办? 如果是这样,可能会出现什么样的问题?有什么方法可以减轻这些问题?
10 monogame 

1
关于独立游戏的法律考虑,我该怎么办?
抱歉,如果这里的背景信息太多,不确定是否有用,但我想我需要概述财务状况,以将其与此处不适用答案的其他问题区分开。 我正在制作一款独立游戏,可以在线出售(即,可以使用PayPal的任何国家/地区出售)。我目前的情况是就业不足-在过去的几年中找不到足够的工作来维持生计,我现在希望利用部分空闲时间通过从业余爱好中赚一些钱来充实自己的收入。首先,我看的是艺术而不是生意,但是由于现金流和就业前景有限,我需要赚点钱。 我的问题是,我应该如何处理销售游戏可能引起的法律问题?我已经阅读了有关小型企业的一般建议,因此我对诸如版权,有限责任和税收之类的常见问题应该没问题-特定于游戏开发的问题令我感到担忧。我还检查了彻底使用过的所有库的许可证(无论如何,这些都是开放的东西)。 当前,软件专利使我感到恐惧-在我的国家,它们可能不合法,但是如果我要通过我的小规模项目获得任何销售,我将不得不投下广阔的基础。据我了解,定义的范围如此之广,范围如此之广或定义欠佳,以至于我实际上不能在至少某些国家不违反游戏规则的情况下制作一款游戏。令我困扰的另一件事是,如果有法律问题我从来没有听说过,直到我收到一封讨厌的信威胁要把所有东西都拿走之前才会听说。 我显然在这里和其他地方搜索过相关问题,但没有运气-答案似乎总是说咨询律师或购买昂贵的法律参考材料-尽管出于上述财务状况,这是出于很好的意图,但是这种建议并不明智。真的不适用。我没有钱,我希望从这个游戏中获得的总收入少于一小时的法律咨询。考虑到专利方面的研究工作量很大,而且我的销售可能来自众多司法管辖区-嗯,我想不出一种办法,就无法依靠律师提供足够的帮助。 因此,考虑到这些考虑因素,任何人都可以建议这样一个规模较小的企业采取明智的行动,这将防止我被关闭,并防止某些拥有软件专利的大公司决定起诉时我失去对游戏的创作权。 ?此外,我还需要采取其他任何步骤来保护自己免受一般咨询站点无法涵盖的针对该行业的法律问题吗?

2
使用gl_quads仍有优势吗?
好的,我知道gl_quads已过时,因此我们不再“应该”使用它们。我也了解现代PC在使用gl_quads运行游戏时实际上会绘制两个三角形。 现在,我听说是因为应该使用三角形来编写游戏。但是我想知道,由于OpenGL如何将四边形变成两个三角形,是否仍然有利于使用四边形? 具体来说,我目前正在从相当大的缓冲区对象渲染许多未连接的四边形。我必须要注意的领域之一是,我用来制作/更新这些缓冲区对象的浮点矢量的大小(我每个顶点有很多额外的浮点值,并且缓冲区中有很多顶点-最大缓冲区约为500KB)。 因此,令我惊讶的是,如果我更改缓冲区对象以绘制三角形,则此顶点数据将大50%(六个正方形绘制一个正方形而不是4个顶点),并且CPU生成所需的时间要长50%。 如果gl_quads仍然有效,我在这里能受益吗?还是在OpenGL自动转换为两个三角形时仍在使用50%的额外内存和CPU时间?
10 opengl 

1
获取2D“像素”云跟随鼠标
我正在开发一个2D游戏,试图获得由数百个微小的立方体或光盘组成的“云”,以跟随我的鼠标光标而彼此不重叠。 但是,随着光盘数量的增加,使用物理引擎会导致性能变慢,并且碰撞检测通常比较困难。 有没有一种简便的方法可以针对这种情况优化引擎?如果没有,那么我会关闭引擎并编写自己的东西会更好吗?(在这里抓着稻草,但是:)是否有很好的资源或示例说明如何做到这一点?
10 2d  physics  unity 

3
将凹面网格分解为一组凸面网格
我希望能够将凹形网格分解为一组凸形网格,原因有两个: 透明渲染 物理形状 是否有一种算法将一组三角形(凹面)作为输入并输出许多三角形(凸面)?我希望它不填充原始网格的各个部分之间的孔。 我已经遇到了一个小主意:找到所有凹形边缘,然后沿边缘环将网格划分。我在正确的轨道上吗?我该如何实施?

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.