游戏开发

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

2
如何将精灵朝其面对的方向移动?
我正在使用Java / Slick 2D。我正在尝试使用鼠标旋转精灵,并使用箭头键移动精灵。我可以让精灵旋转没有问题,但是我不能让它朝应该的方向移动。当我点击“前进”时,子画面不一定会移向鼠标。实际上,它只会真正移到屏幕的左侧。我确信必须有一些标准代码,因为许多游戏都使用这种风格的动作。谁能帮我解决这个三角帆的问题?谢谢 编辑:这是旋转代码(它做其他奇怪的事情: https //stackoverflow.com/questions/12610320/why-is-my-image-rotating-off-center) int mX = Mouse.getX(); int mY = HEIGHT - Mouse.getY(); int pX = sprite.x; int pY = sprite.y; int tempY, tempX; double mAng, pAng = sprite.angle; double angRotate=0; if(mX!=pX){ mAng = Math.toDegrees(Math.atan2(mY - pY, mX - pX)); if(mAng==0 && mX<=pX) mAng=180; } else{ …

2
将OpenGL原点更改为屏幕左上方时,我应该担心什么?
对于自我教育,我正在使用SDL / OpenGL用C ++编写2D平台引擎。我最初使用sdltutorials.com和lazyfoo.net上的教程从纯SDL开始,但是现在我使用SDL创建OpenGL渲染上下文,然后使用OpenGL函数进行渲染(特别是即时模式,但是我正在学习VAO / VBO) )。我仅将SDL用于接口,音频等。 SDL使用坐标系,其原点位于屏幕的左上角,而y轴的正指向下。在OpenGL中设置正投影可以很容易地做到这一点。 我知道纹理坐标是一个从0到1的右手系统-在渲染之前垂直翻转纹理(好吧,在加载之前翻转文件)会产生可以正确渲染的纹理...如果我正在绘制,这很好整个纹理,但最终我将使用tileset并可以想象问题。 执行此操作时,我应该在渲染方面关注什么? 如果有人提出任何建议,或者他们自己做了建议并指出未来的陷阱,那将是不错的选择,但实际上任何想法都会受到赞赏。
11 c++  opengl  2d  sdl 

2
菱形方形地形生成问题
根据本文,我已经实现了菱形平方算法:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 问题是我在地图上到处都是陡峭的悬崖。递归地细分地形时,它发生在边缘: 来源如下: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

2
在3D游戏中向目标射击的算法
对于那些想起“下降自由空间”的人来说,它有一个不错的功能,可以帮助您在射击非归巢的导弹或激光时瞄准敌人:它在您追赶的船前显示了十字准线,告诉您在哪里射击才能击中移动的物体。目标。 我尝试使用来自/programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1的答案,但它适用于2D,所以我尝试了适应它。 我首先分解计算以求解XoZ平面的交点并保存x和z坐标,然后求解XoY平面的交点,然后将y坐标添加到最终的xyz中,然后将其转换为剪贴空间并在其上放置纹理坐标。但是,它当然不能正常运行,否则我就不会提出这个问题。 根据我的发现,在XoZ平面中找到x和在XoY中找到x之后,x并不相同,因此一定有问题。 float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) - ENG_Math.sqr(projectileSpeed); float b = 2.0f * (targetVelocity.x * targetPos.x + targetVelocity.y * targetPos.y); float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y); ENG_Math.solveQuadraticEquation(a, b, c, collisionTime); 第一次targetVelocity.y实际上是targetVelocity.z(与targetPos相同),第二次它实际上是targetVelocity.y。 XoZ之后的最终位置是 crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f, minTime * finalEntityVelocity.z + finalTargetPos4D.z); 在XoY之后 crossPosition.y = …
11 mathematics  ai  aiming 

3
使用Bullet时,物理无法通过网络正确同步
我正在尝试使用Bullet实现客户端/服务器物理系统,但是我在使事物同步方面遇到问题。 我实现了一个自定义运动状态,该状态可以从我的游戏对象读取和写入转换,并且可以在本地运行,但是我尝试了两种不同的网络游戏方法: 使客户端上也在服务器上的动态对象(例如,不是随机碎片和其他不重要的东西)成为运动学对象。这可以正常工作,但对象移动得不太平稳 对象在这两者上都是动态的,但是在服务器发出的每个对象移动的消息之后,我将线速度和角速度设置为服务器上的值,并使用服务器上的转换调用btRigidBody :: proceedToTransform。我也叫btCollisionObject :: activate(true); 强制更新对象。 我对方法2的意图是基本上执行方法1,但是劫持Bullet进行穷人的预测,而不是自己动手解决方法1,但这似乎行不通(原因并非100%明确我什至单步执行“项目符号”,并且有时这些对象最终会出现在不同的位置。 我朝着正确的方向前进吗?Bullet似乎内置了自己的插值代码。那可以帮助我使方法1更好地工作吗?还是我的方法2代码不起作用,因为我不小心踩了它? 编辑:我刚刚注意到的方法1的另一个问题是,碰撞响应将与非同步对象发生碰撞。动能体有时会射出无限的东西,因为它们无法被击退。

2
调整AStar以找到最接近无法到达目的地的位置
我已经用Java实现了AStar,它在有障碍物可以到达所选目的地的区域也可以正常工作。 但是,当目的地不可到达时,计算出的“路径”绝不是最接近的位置(到不可到达的位置),而是某种随机路径。 有没有一种可行的方法可以调整AStar到最接近无法到达目的地的位置的路径?

6
游戏状态管理(游戏,菜单,标题屏幕等)
基本上,到目前为止,在我制作的每个游戏中,我总是有一个变量,例如“ current_state”,可以是“ game”,“ titlescreen”,“ gameoverscreen”等。 然后在我的Update函数上,我有一个庞大的功能: if current_state == "game" game stuf ... else if current_state == "titlescreen" ... 但是,我觉得这不是处理状态的专业/干净方法。关于如何更好地执行此操作的任何想法?还是这是标准方式?

1
跨多个监视器呈现Unity
目前,我正试图统一在2个监视器上运行。我已经进行了一些研究,并且知道这是完全可能的。有一种解决方法,您基本上必须弄乱窗口大小才能统一在两个监视器上进行渲染。 我所做的是创建一个新的自定义屏幕分辨率,该分辨率采用了两台显示器的宽度,如下图所示,即3840 x 1080: 但是,当我去运行我的统一游戏exe时,该大小不可用。我所得到的是以下内容: 我的自定义尺寸应该在最底端,但不是。当我通过自己的exe来运行游戏时,是否有我未曾做过或错过的事情会统一使用我的自定义屏幕大小? 奇怪的是,在统一编辑器中,拾取了我的自定义屏幕尺寸,并且可以在游戏窗口中将其设置为: 从文件菜单构建和运行游戏时,我有忘记做的事情吗?有人曾经打败过这个问题吗?
11 unity  rendering 

1
模拟游戏苹果-无法使其正常工作
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我正在尝试创建一个具有牛顿物理学的游戏。 在您阅读其余内容之前,这是我要寻找的以下主要问题: 尝试运行代码后,我一直收到在窗口中弹出的错误。我缺少什么库或dll? 我有一个苹果,一个橘子和一支铅笔。我已经使用子弹式物理引擎阅读了大多数文档,但似乎无法让苹果像纸一样工作(二维)。Box2d物理引擎等不是我想要的。我不喜欢现实生活中的盒子,更不用说在网络世界中了。 我希望苹果漂浮在地上,像纸一样来回摆动。该站点提供了一些有用的信息,这些信息已集成到我的代码中:htp://www.3dbuzz.com/vbforum/showthread.php?50854-Please-HELP !! -Simulating-paper-floating-to-ground 对于让您使对象的行为像其他类型的对象一样的游戏,我有这个想法,但是我对游戏的模拟无法正常工作。 我经历了太多种类的苹果,无法计数,甚至没有一个接近。我曾尝试寻找其他尝试过类似事情的人(使用诸如http://lmgtfy.com/?q=simluating+game+apples+in+real+life之类的Google),但从来没有返回过苹果! 因此,我认为我要进入新的领域(不用担心,我将开放我的技术的源代码),这就是为什么事情对我不起作用的原因。 我尝试过编程各种苹果,但是也许我需要一个网络苹果?我不知道在哪儿找到这样的东西,也许是在这样的地方:http : //cyberapples.com/虽然该站点目前处于关闭状态-它只是谈论某些cgi垃圾桶之类的东西。还有任何提示吗? 这是我的代码部分,涉及苹果模拟游戏内容: ///... /* setup other objects in the room and other stuff */ ... // see http://www.orangepippin.com/apples/arlet-swiss-gourmet // for more arlet apple details paper_2d_behaving_apple = new ArletApple[); / setup the arlet apple's general characteristics …
11 c++ 

5
我应该从游戏的源代码控制存储库中排除哪些文件类型?
我已经开始与朋友一起使用Unity进行个人项目,我们已经建立了自己的源代码控制系统。 我知道以下事实:存在许多类型的文件,即在构建时在本地生成的文件(例如,Visual Studio文件)以及特定于特定计算机的文件,不应添加到源代码管理中,而是我不确定这些文件类型是什么。 我不想排除应该包含的任何生成文件,例如.meta文件。 有人将能够列出所有或至少所有不应该添加到版本控制中的通用文件类型,特别是对于Unity项目吗?

3
如何用粒子模拟压力?
我正在尝试在要构建的Unity游戏中使用一组球形粒子来模拟压力。关于此问题的几个注意事项: 目标是用无摩擦的小球填充不断变化的2d空间/空隙。游戏正在尝试模拟将更多物体推入该空间的压力不断增加。 关卡本身一直在从左向右滚动,这意味着如果用户未更改该空间的尺寸,它将自动变小(该空间的最左侧部分将不断在屏幕外滚动)。 我想知道我可以采取什么方法来解决这些问题... 知道何时检测何时有空间要填充,然后将球体添加到该空间。 缩小时,从空间中移除球体。 模拟球体上压力的策略,以便在创建更多空间时它们“向外爆炸”。 我正在考虑的当前方法是使用不断移动的墙,该墙不在屏幕上并随屏幕移动,如下图所示: 。 这个移动的壁会将球体推入并捕获到空间中。至于添加新球体,我将要么(1)在检测到自由空间时复制球体,要么(2)在空间的左侧(壁所在的位置)生成它们-将其余球体推向填补空间。我预见了想法1的问题,因为这可能不会真正产生/模拟压力。想法2似乎更有希望,但是提出了一个问题,即如何为这些新的球形粒子提供生成位置(以及在没有空间的情况下生成它们的后果)。 非常感谢您的智慧!
11 2d  unity  physics 

1
GLSL中的相对论着色器
我正在尝试实现一个GLSL着色器,该着色器有助于理解相对论的洛伦兹变换。 让我们拿两个与轴对齐的惯性观测器 O和O'。观察者O'处于运动中,观察者O具有速度v=(v_x,0,0)。 用O'坐标描述时,事件P' = (x',y',z',ct')已转换坐标(x,y,z,ct)= L (x',y',z',ct') 其中L是一个称为Lorentz变换的4x4矩阵,它可以帮助我们将事件P'的O坐标写入坐标中。 (有关详细信息,请参见http://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x方向) 我已经写下了第一个初步的顶点着色器,该着色器在给定每个顶点速度的情况下应用了Lorentz变换,但是我无法使变换正常工作。 vec3 beta= vec3(0.5,0.0,0.0); float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12; float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost) float q=(g-1.0)/b2; //http://en.wikipedia.org/wiki/Lorentz_transformation#Matrix_forms vec3 tmpVertex = (gl_ModelViewMatrix*gl_Vertex).xyz; float w = gl_Vertex.w; mat4 lorentzTransformation = mat4( 1.0+beta.x*beta.x*q , beta.x*beta.y*q , beta.x*beta.z*q , …

2
为什么切线空间法线贴图不是全蓝色的?
为什么法线贴图不只是蓝色的?我认为法线贴图应主要为蓝色,因为法线的Z分量由蓝色表示。法线在Z方向上指向曲面之外,因此我们应该将蓝色视为主要颜色,因为Z分量占主导。 根据定义,切线空间垂直于表面。在任何时候,我们都应该使法线始终指向Z(蓝色方向),而没有X(红色方向)或Y(绿色方向)。因此,法线贴图(因为它是“法线贴图”)应具有仅蓝色的法线颜色(R = x = 0,G = y = 0,B = z = 1),中间没有阴影。 但是法线贴图并非如此,并且它们中具有阴影渐变。为什么会这样呢?

2
贴花实施
我在查找有关贴花的信息时遇到了问题,因此也许这个问题会对他人有所帮助。该实现适用于前向渲染器。 有人可以确认我是否可以执行贴花吗? 您可以定义任意尺寸的立方体,以定义公共空间中的投影体积。您检查与定义的立方体的三角形相交以接收投影将影响的三角形。 您修剪这些三角形并保存它们。 然后,您可以使用矩阵技巧来为已保存的三角形计算UV坐标,这些三角形将参考您要投影的纹理。 为此,您可以使用表示公共空间中立方体的高度,宽度和深度的向量,以使fe的左下角为原点。 将其作为i,j,k单位向量放入矩阵中,设置多维数据集的平移,然后对该矩阵求逆。 您可以将保存的三角形的顶点乘以该矩阵,这样就可以将它们的坐标保存在用作UV坐标的0到1大小的立方体内。 这样,您可以将原始三角形投影到其上,并具有UV坐标(UV坐标参考要投影的纹理)。 然后,将保存的三角形重新渲染到场景上,它们将用投影图像覆盖投影区域。 现在,我找不到答案的问题。最后一点对吗?我从未做过软件裁剪,但由于精度有限,似乎容易出错,因为投影纹理会发生一些z争斗。另外,获得UV坐标的方法是否正确?

6
具有2000万个图块的地图会使游戏内存不足,如何避免呢?
在加载额外的巨大地图时,加载方法会在创建新的地图图块实例时抛出内存不足异常。我希望至少在服务器应用程序(如果可能的话,在客户端)上处理整个地图。我应该如何解决这个问题? UPD:这里的问题是,当仍有可用的可用内存时,如何使游戏停止崩溃。至于将地图分成几块,这是一个好方法,但不是我想要的。 UPD2:最初,我去给每个新的tile类实例分配了一个纹理,这就是占用大量内存(也需要加载时间)的原因。现在,它占用的空间减少了大约四倍。多亏了每个人,现在我可以运行巨大的地图,而无需考虑将它们分解成几块。 UPD3:重写代码以查看图块属性的数组是否运行得更快或消耗的内存更少(比相应的图块中的对象属性表示的对象属性要小),我发现不仅花了很多时间去尝试,而且并没有带来任何性能上的改进,并且使游戏难以调试。

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.