游戏开发

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

3
将Vector3转换为Vector2的最有效方法
将Vector3转换为Vector2的最有效,最快的方法是什么? 铸件: Vector2 vector2 = (Vector2)vector3; 初始化一个新的Vector2: Vector2 vector2 = new Vector2(vector3.x, vector3.y); 还是我不知道另一种方法?
11 unity  c#  performance 

5
壁架爬升动画和移动(二维平台游戏)
努力为物理驱动的2D平台游戏平台实施壁架攀爬机械师做出决策。避免过于复杂的最佳方法是什么? 到目前为止,我了解(这里的爱好者不是专业人士)有几种选择,包括: 在y轴上对刚体施加受控的力,直到根部位置刚好在手部位置上方,然后在x轴上施加足够的力,以使角色站立在平台上。同时以某种方式将其与爬升动画同步。 备注:在这里运动很容易,甚至可以通过棱柱形滑动关节进行控制,但是我不确定如何使动画(脊柱)与运动保持同步。 驱动角色根部位置的根动画。完成后传送刚体,并希望box2d仍能及时对任何碰撞(如果有任何物体从天上掉落)做出适当响应。 备注:听起来实际上更容易制作动画,但是不确定我是否会在spine运行时,box2d或更高版本的移动平台和不同高度的平台上遇到任何问题。 以编程方式在手上应用IK约束以将其锁定在适当位置,然后继续手动旋转骨骼或应用小的预设(少量关键帧/帧)动画,同时将所需的力施加到刚体上。 备注:似乎这样可以最大程度地控制播放器,但是对于我来说,在我的水平上实现它听起来很复杂,而不是确切地确定从哪里开始。 预先感谢您的任何投入! 仅供参考:这是一个带box2d的基于ECS(libgdx + Ashley)的引擎。壁架抓斗已经实现为一个单独的系统,因此我们在这里可以假定角色已经能够从任何高度的壁架上悬挂下来。
11 2d  libgdx  box2d  spine 

6
如何以子像素为单位移动精灵?
像素打开或关闭。您可以移动精灵的最小数量是一个像素。那么如何使子画面每帧移动速度慢于1像素? 我这样做的方法是将速度添加到变量中,然后测试速度是否达到1(或-1)。如果确实如此,那么我将移动精灵并将变量重置为0,如下所示: update(dt): temp_dx += speed * dt temp_dy += speed * dt if (temp_dx > 1) move sprite reset temp_dx to 0 if (tempy_dy > 1) move sprite reset temp_dy to 0 我不喜欢这种方法,因为它感觉很傻,而且精灵的动作看起来非常生涩。那么,您将以哪种方式实现亚像素移动?

1
如何在Android中可靠地实现GPU外观?
我正在尝试让角色皮肤在Android上正常工作。 这个想法很原始:我有我的蒙皮矩阵,并且与每个顶点一起,我最多发送四个矩阵索引和四个相应的权重。我将它们汇总到顶点着色器中,并将其应用于每个顶点。 这就是我在游戏的iOS版本中的顶点着色器中所做的事情(不要介意法线): attribute vec4 in_pos; attribute vec4 in_normal; attribute vec2 in_texture_coords; attribute vec4 in_bone_index; attribute vec4 in_bone_weight; varying vec2 fs_texture_coords; uniform mat4 world_view_projection; uniform mat4 bones[@bind_matrix_count]; void main() { // Skinning vec4 transformed_pos = ((in_pos * bones[int(in_bone_index.x)]) * in_bone_weight.x) + ((in_pos * bones[int(in_bone_index.y)]) * in_bone_weight.y) + ((in_pos * bones[int(in_bone_index.z)]) …

1
在Unity中更改对象的精灵
我想在hero(object)的脚本代码中添加更改其sprite的可能性。 因此,播放器按下了空格键,该精灵变成了已经添加到项目中的另一个精灵。 您可以提供一个示例代码来做到这一点吗?
11 c#  2d  unity  sprites 

2
可以“切割”所有几何形状的孔的着色器
如何创建“切割”所有几何图形的着色器,仅在Unity中渲染清除背景?一个例子: 那是一个巨大的白色盒子形房间里的棱镜。棱镜的表面只是渲染场景的天空盒(星空)。我使用了多个摄像头,效率很低...必须有一种仅使用着色器的方法。 我怎样才能做到这一点?

3
正在保存无赖游戏状态?
我正在使用HTML5和jQuery进行基本的roguelike,但遇到了问题。 按照游戏当前的状态,每次用户在楼层之间移动时,系统仅保存游戏状态-以最大程度地减少开销。这样做的危险是,如果用户遇到麻烦,他们可以简单地关闭窗口并在当前楼层的开头返回他们的游戏。这极大地降低了游戏难度(并几乎打败了“流氓”游戏的目的)-但是在每位玩家移动或攻击时保存游戏状态是不合理的。 我研究了在浏览器窗口关闭时保存游戏状态的方法,但我对它们不满意。我的问题是:假设“保存游戏状态”意味着适当的ajax / post请求,那么我如何阻止这种欺骗行为呢?与保存整个地图状态相反,是否存在已知的方法来量化2d地图的增量/过程变化?请注意,我不是在要求“最有效的方法”,而是在寻找现有的方法来纠正我的经验不足。

4
实体系统和渲染
Okey,到目前为止我所知道的;该实体包含一个组件(数据存储),其中包含类似信息;-纹理/精灵-着色器-等等 然后我有一个渲染器系统,可以绘制所有这些图像。但是我不明白渲染器应该如何设计。每个“视觉类型”都应有一个组件吗?一个组件没有着色器,一个组件具有着色器,等等? 只需输入一些“正确方法”即可完成此操作。要提防的提示和陷阱。

2
如何在基于实体/组件的系统中构造游戏状态
我在做设计与实体分量范例,使用系统组件之间的通信,说明游戏在这里。在开发过程中,我已经达到需要添加游戏状态(例如暂停,播放,关卡开始,回合开始,游戏结束等)的地步,但是我不确定如何在我的框架中进行操作。我看这对游戏状态的代码示例,每个人都似乎是参考,但我不认为它与我的框架适合。似乎每个状态都处理自己的绘图和更新。我的框架有一个SystemManager,可以处理使用系统进行的所有更新。例如,这是我的RenderingSystem类: public class RenderingSystem extends GameSystem { private GameView gameView_; /** * Constructor * Creates a new RenderingSystem. * @param gameManager The game manager. Used to get the game components. */ public RenderingSystem(GameManager gameManager) { super(gameManager); } /** * Method: registerGameView * Registers gameView into the RenderingSystem. * @param gameView …

3
等距碰撞检测
我在尝试检测两个等距图块的冲突时遇到了一些问题。 我尝试在图块上的每个点之间绘制线,然后检查线截距,但是这行不通(可能是由于公式错误) 经过一段时间的研究,我相信我正在考虑很多,而且必须有一种更简单的方法。 我不是在寻找代码,只是一些建议以最佳方式实现重叠检测

3
整体地图设计与图块阵列设计
我正在开发2D RPG,它将具有通常的地牢/城镇地图(预先生成)。 我正在使用图块,然后将它们结合起来制作地图。我最初的计划是使用Photoshop或其他一些图形程序组装瓷砖,以便获得一张更大的图片,然后将其用作地图。 但是,我在一些地方读过人们在谈论他们如何使用数组在引擎中构建地图(因此,您向引擎提供了x个tile数组,并将它们组装成地图)。我能理解它是如何完成的,但是实现起来似乎要复杂得多,而且看不到明显的优点。 最常用的方法是什么,每种方法的优点/缺点是什么?
11 tiles  maps 

2
在哪里可以了解NES时代游戏中使用的技术?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我喜欢阅读NES时代游戏中使用的技术。是否有专门致力于此主题的博客或网站? 例如,这是一篇谈论吃豆人的文章,另一篇是关于《塞尔达传说》中的运动的文章。
11 blog 

1
圆线碰撞检测问题
我目前正在开发一个突破克隆,我遇到了障碍,无法正确检测球(圆)和砖(凸多边形)之间的碰撞。我正在使用“圆线碰撞检测”测试,其中每条线代表凸多边形砖上的边缘。 在大多数情况下,Circle-Line测试可以正常工作,并且可以正确解决碰撞点。 碰撞检测正常工作。 但是,有时候我的碰撞检测代码由于球实际上与砖相交时的负判别而返回false。 碰撞检测失败。 我知道这种方法的效率低下,并且使用了轴对齐的边界框来减少测试砖的数量。我主要关心的是下面的代码中是否存在任何数学错误。 /* * from and to are points at the start and end of the convex polygons edge. * This function is called for every edge in the convex polygon until a * collision is detected. */ bool circleLineCollision(Vec2f from, Vec2f to) { Vec2f lFrom, …



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.