游戏开发

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

2
Microsoft XNA Platformer示例,是否正确实施了碰撞检测?
Microsoft提供的示例似乎(从我所看到的)碰撞检测将有一个小错误。当用户与不可通过的图块碰撞时,将计算相交的深度。深度值X和Y中较小的一个用于固定用户的位置,因此它不再与图块碰撞。但是,如果用户沿对角线行驶,这是否可能导致用户无法准确地到达角色首先与图块发生碰撞的位置? 我可能是错的,但这只是我的看法。 private void HandleCollisions() { // Get the player's bounding rectangle and find neighboring tiles. Rectangle bounds = BoundingRectangle; int leftTile = (int)Math.Floor((float)bounds.Left / Tile.Width); int rightTile = (int)Math.Ceiling(((float)bounds.Right / Tile.Width)) - 1; int topTile = (int)Math.Floor((float)bounds.Top / Tile.Height); int bottomTile = (int)Math.Ceiling(((float)bounds.Bottom / Tile.Height)) - 1; // Reset …

7
RTS游戏中的键盘快捷键
假设您有一个多人RTS游戏(例如,《沙丘》,《帝国时代》,《定居者》,《魔兽争霸》)。键盘上有一些命令可以用来指挥部队(停止,攻击,移动),还有一些更通用的命令,例如暂停或退出。游戏已本地化为多种语言(超过18种)。 我可以看到两种使用键盘快捷键的方式: A.在每个语言环境中使用上述命令的第一个英文字母(“ S”,“ A”,“ M”,“ P”等)。 B.在该语言环境中使用单词的第一个字母(例如,俄语快捷方式将为“С”,“А”,“Д”,“П”。德语将为“ H”,“ A”,“ S”等)。 ) 在为多个语言环境选择快捷方式时,以下哪种方法(或建议您自己使用)更好? PS当然,快捷方式可能是由玩家自定义的,但是仍然需要一些合理的默认设置。

2
在基于组件的实体系统中处理脚本化和“本机”组件
我目前正在尝试实现一个基于组件的实体系统,该实体基本上只是一个ID和一些将一组组件捆绑在一起以形成游戏对象的辅助方法。其中的一些目标包括: 组件仅包含状态(例如位置,健康状况,弹药计数)=>逻辑进入“系统”,该系统处理这些组件及其状态(例如PhysicsSystem,RenderSystem等) 我想用纯C#和脚本(Lua)实现组件和系统。基本上,我希望能够直接在Lua中定义全新的组件和系统,而不必重新编译C#源代码。 现在,我正在寻找有关如何高效且一致地处理此问题的想法,因此,例如,无需使用其他语法来访问C#组件或Lua组件。 我当前的方法是使用常规的公共属性实现C#组件,这些属性可能装饰有一些属性,这些属性可以告诉编辑器默认值和内容。然后,我将得到一个C#类“ ScriptComponent”,该类仅在内部包装Lua表,该表由脚本创建并保存该特定组件类型的所有状态。我真的不希望从C#端访问该状态,因为我在编译时不知道可以使用哪些ScriptComponents和哪些属性。尽管如此,编辑器仍需要访问它,但是像下面这样的简单界面就足够了: public ScriptComponent : IComponent { public T GetProperty<T>(string propertyName) {..} public void SetProperty<T>(string propertyName, T value) {..} } 这将简单地访问Lua表并从Lua设置和检索那些属性,并且也可以轻松地将其包含在纯C#组件中(但随后可以通过反射或其他方式使用常规C#属性)。这只能在编辑器中使用,不能用常规的游戏代码使用,因此性能在这里并不重要。这将有必要生成或手写一些组件描述,以记录某些组件类型实际提供的属性,但这不是一个大问题,并且可以实现足够的自动化。 但是,如何从Lua端访问组件?如果我调用类似的东西,getComponentsFromEntity(ENTITY_ID)我可能只会获得一堆本地C#组件(包括“ ScriptComponent”)作为用户数据。从包装的Lua表访问值将导致我调用该GetProperty<T>(..)方法,而不是像其他C#组件那样直接访问属性。 也许编写一个getComponentsFromEntity()只能从Lua调用的特殊方法,该方法会将所有本机C#组件作为用户数据返回,但“ ScriptComponent”除外,它将返回包装后的表。但是会有其他与组件相关的方法,我真的不想复制所有这些方法,无论是从C#代码还是从Lua脚本调用。 最终目标将是处理所有类型的组件相同,而在本机组件和Lua组件之间(尤其是从Lua方面)不区分特殊情况的语法。例如,我希望能够编写如下的Lua脚本: entity = getEntity(1); nativeComponent = getComponent(entity, "SomeNativeComponent") scriptComponent = getComponent(entity, "SomeScriptComponent") nativeComponent.NativeProperty = 5 scriptComponent.ScriptedProperty = 3 该脚本不必关心它实际上获得了哪种组件,我想使用与C#端相同的方法来检索,添加或删除组件。 也许有一些将脚本与实体系统集成在一起的示例实现?

2
我必须在9天之内完成游戏。啊![关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 如果您只是想提一个问题并跳过背景,请转到下一段,否则请继续阅读。好吧,我13岁,在业余时间做游戏。他们从未真正与任何人或任何人共享过,所以我决定我将参加针对中学生的STEM电子游戏挑战赛。我决定使用Stencyl制作游戏,因为那是一月,所以我认为我会在某个时候进行开发。在那之后,我参加了我学校的一出戏,这花费了我大量的时间,今天我意识到这是3月3日,这意味着我有9天的时间来制作游戏! 因此,我必须在9天之内完成游戏,并且可能要使用stencylworks。我只需要一个可以在9天之内执行的想法,以及高效游戏开发的一般技巧。抱歉,这是一个宽松的问题,在此先感谢!


2
在简单的冒险游戏中实现行为
我最近一直在通过编写一个简单的基于文本的冒险游戏来娱乐自己,而我一直停留在看似非常简单的设计问题上。 简要概述一下:游戏分为Room对象。每个对象都有该房间Room中的Entity对象的列表。每个对象Entity都有一个事件状态,它是一个简单的string-> boolean映射,以及一个动作列表,它是一个string-> function映射。 用户输入采用形式[action] [entity]。在Room使用实体名称返回合适的Entity对象,然后使用操作名称来找到正确的功能,并执行它。 为了生成房间描述,每个Room对象显示其自己的描述字符串,然后附加每个的描述字符串Entity。该Entity描述可基于其状态(“门被打开”,“门关闭”,“门被锁定”,等等)。 问题出在这里:使用这种方法,我需要快速实现的描述和动作函数的数量就一发不可收拾。我的起居室仅在5个实体之间就具有约20种功能。 我可以将所有动作组合为一个函数,并通过if-else /进行切换,但是每个实体仍然是两个函数。我还可Entity以为常见/通用对象(例如门和钥匙)创建特定的子类,但是到目前为止,这还不多。 编辑1:根据要求,这些动作函数的伪代码示例。 string outsideDungeonBushesSearch(currentRoom, thisEntity, player) if thisEntity["is_searched"] then return "There was nothing more in the bushes." else thisEntity["is_searched"] := true currentRoom.setEntity("dungeonDoorKey") return "You found a key in the bushes." end if string dungeonDoorKeyUse(currentRoom, thisEntity, player) if getEntity("outsideDungeonDoor")["is_locked"] then getEntity("outsideDungeonDoor")["is_locked"] := …

3
在慢动作中显示碰撞是否在计算上令人放松?
在许多赛车游戏(例如Burnout Paradise)中,当碰撞将要发生时,游戏会自动切换为慢动作并以缓慢的顺序进行,直到碰撞完成为止。 我一直以为这是为了效果。您不想错过任何碰撞!但是我的一位朋友最近建议这样做是为了确保在发生碰撞时不需要过多的处理速度。 现在我认为这实际上是相反的。当发生碰撞时,慢动作中会显示很多细节,我确信计算和渲染管道会产生开销。 什么是对的? 慢动作场景会增加还是减少CPU / GPU使用率?

4
我应该移动世界还是移动玩家?
我将要开始开发一款侧向滚动游戏,该游戏的目标是在着陆之前在水平轴上尽可能移动。请注意,我不需要再沿水平轴返回。 我正在使用使用OpenGL和Box2d的Android版AndEngine进行开发。 在开始之前,我需要确定一些重要的事情:我应该使用玩家周围的世界来模拟运动还是实际移动玩家并跟随他使用游戏引擎的摄像头功能? 两种方法似乎都有不同的长处和后备,所以我不知道哪种方法最好。例如,什么将使在途中增加电源并具有良好的动画背景变得更容易? 谢谢!

3
如何用C ++组织游戏引擎?我使用继承是个好主意吗?
我是游戏开发和编程的初学者。 我正在尝试学习构建游戏引擎的一些原理。 我想创建一个简单的游戏,正要尝试实现游戏引擎。 所以我认为我的游戏引擎应该控制这些事情: - Moving the objects in the scene - Checking the collisions - Adjusting movements based on collisions - Passing the polygons to the rendering engine 我设计了这样的对象: class GlObject{ private: idEnum ObjId; //other identifiers public: void move_obj(); //the movements are the same for all the objects (nextpos …
11 c++  architecture  oop 

5
统一的2D角色控制器(试图将老式的平台游戏带回来)
这几天,我试图创建一个统一的2D角色控制器(使用物理)。我对物理引擎刚起步,因此很难获得想要的控制感。如果有人可以为我发现的问题提供解决方案,我将非常高兴: 这是我现在的FixedUpdate: public void FixedUpdate() { Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0); _body.AddForce(v); v.y=0; if(state(MovementState.Left)) { v.x=-_walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed; } else if(state(MovementState.Right)) { v.x= _walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed; } _body.velocity=v; Debug.Log("Velocity: "+_body.velocity); } 我在这里尝试通过向左和向右施加重力和线性力来移动刚体。我设置了一种物理材料,该材料在运动时不会弹跳,摩擦力为0,在静止时摩擦力为1。主要问题是我的撞机具有坡度,并且速度从上升(慢),下坡(更快)和在直线对撞机(正常)上行走而变化。如何解决?如您所见,我始终对x轴应用相同的速度。 对于玩家来说,我在脚位置设置了一个球体,这是我要施加力的刚体。 欢迎其他任何可以使我的生活更轻松的提示:)。 PD在回家时,我注意到我可以解决这个问题,方法是平行于玩家正在行走的表面施加恒定的力,但是不知道这是否是最佳方法。

2
如何建立一个世界玩家库存系统?
我遇到了一个尝试在XNA内实施清单系统的问题(这并不重要,可以是任何平台),但是到目前为止。这是我要解决的问题: 我如何才能从世界上获得一件物品(想想当您杀死一个怪物时,它会掉落护甲)并将其放入玩家的库存中吗? 如果库存只是物品清单,从技术上讲,如何在没有上课的情况下将世代钢剑带入玩家的库存中? 我目前有一个项目结构,其中包含一个唯一的十六进制值,一个有多少项目的计数(用于可堆叠对象,如箭头)和一个用于在库存中进行渲染的纹理,以及一些其他不重要的属性(名称,说明等) 。 如果我必须修改现有的项目类以容纳世界位置以及碰撞检测(这不希望该项目掉落到地球上),那将是一个糟糕的设计。 感谢您的考虑!
11 xna  c#  2d 

2
如何在Bullet物理引擎中禁用Y轴运动
我想创建一个对象,而不仅要沿X和Z轴移动,同时还要使Y轴保持禁用状态(就像在2D模式下移动一样,该对象也不会掉落)。 我目前正在使用6自由度约束来限制Y轴上的移动,但是它不起作用: btRigidBody* zeroBody = new btRigidBody(0, NULL, NULL); // Create the body that we attach things to btRigidBody* robot = mCarChassis->getBulletRigidBody(); btGeneric6DofConstraint* constrict = new btGeneric6DofConstraint(*robot, *zeroBody, btTransform::getIdentity(), btTransform::getIdentity(), false); constrict->setLinearLowerLimit( btVector3( 1, 1, 1)); constrict->setLinearUpperLimit( btVector3(-1, 1,-1)); constrict->setAngularLowerLimit( btVector3( 1, 1, 1) ); constrict->setAngularUpperLimit( btVector3(-1, -1, -1) ); …

4
玩家向上移动,他是跳跃还是攀爬?
在其中带有梯子的基于2D物理的平台游戏中,您如何确定玩家向上移动是由跳跃引起还是由他爬梯引起的,从而使您知道要播放哪种动画? 通常,方向向量显然不足以确定要播放的动画:您还如何确定运动原因(因此您知道要使用的正确精灵)?

3
是纯OpenGL还是GLSL?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我对研究图形编程很感兴趣,因此显而易见的切入点是学习OpenGL。但是,在论坛和站点周围收集分散的信息时,似乎似乎已经淘汰了纯OpenGL实现,因为3.0版之前的大多数内容已被弃用,并引用了Amazon的评论,“自3.0版以来,所有内容均与着色器有关”。在我所见过的书中,看起来只有上篇涵盖了较新的版本,而部分原因是因为书中很大一部分讲授了过时的功能,并且有专门针对GLSL的书。 这是我遇到的第一个问题,某些硬件不支持GLSL,包括我计划使用的具有英特尔集成显卡的笔记本电脑。功能 GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); 导致分段错误,从它的外观看,我的驱动程序不支持着色器 所以我的问题是,仅在OpenGL中制作游戏的可行性是什么?着色器语言会缺少不可替代的良好功能吗?我期望什么样的硬件(旧的i3,i5,i7,旧的VGA)可以正确运行带有着色器的游戏?
11 opengl  glsl 

2
如何有效开发Android游戏?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我已经附上了我用油漆制作的流程图的图像。 该图显示了我想如何开发自己的游戏。我想要一款运行良好的游戏,它具有易于更新的智能编码,并且随着时间的推移具有广告功能。我的目标平台是Android智能手机,所有代码将使用具有XML扩展资源的Java编写,如果那很重要的话。我不是在寻找硬代码,尽管伪代码会有所帮助,但我还是更喜欢建议和专业意见。 我的问题是: 这是编写游戏程序的好方法还是有更好的方法来进行游戏?是否需要进行任何修改?任何建议都是有用的,因为我没有游戏编程方面的经验,所以我更喜欢那些写过几款游戏并且从经验中知道应该如何设置其代码才能有效运行的人的建议。

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.