游戏开发

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

1
如何获得“ 8位图形”外观?
我有很强的编程背景,但并非来自游戏开发。我在高中时只打过乒乓球和蛇,在大学时做了过OpenGL。 我想制作自己的游戏引擎。只是一个简单的2D游戏引擎就没什么了。但是因为我有点老派,而且感觉复古。我希望图形看起来像旧的8位游戏(《超人》,《魂斗罗》,《超级马里奥》等)。 那么,当时的旧游戏是如何制作的?我想要最简单的方法。他们现在是否还在像新引擎一样使用资产(图像)?如何使用OpenGL实现这种渲染? 记住。最简单的解决方案。我想知道当时的制作方法以及如何复制它。甚至不必是OpenGL。我可以在窗户画布上画画。我确实想从头开始。

4
建立游戏开发团队时的法律注意事项
我将与另外两个开发人员和一个艺术家(尚未找到我的艺术家)一起开始一个项目。不过,我不确定从法律角度来看应该如何处理。 我们应该签合同吗?该文件应说明什么? 该游戏很可能是免费的。

2
船在基于RTS的2D瓦片中的桥下通过
我正在编写基于2D切片的RTS。我想为其添加“伪3D”功能-跨河桥梁。 我还没有开始任何编码,只是试图考虑它如何适合碰撞检测模型。经过桥下的船只和经过桥上的部队最终将占据地图上的同一单元。如何防止它们发生碰撞? 是否有解决此问题的通用方法?还是我需要实现3D世界才能做到这一点?

1
如何使用std :: vector实现存储咒语和物品?
我现在正在跟着GameInstitute的一本书,它要求我: 允许玩家购买和携带治疗药水和火球药水。您可以将Item数组(在定义item类之后)添加到Player类中以存储它们,或使用std :: vector来存储它们。 我想我想使用std::vector实现,因为这似乎使我比创建一个项目类更容易些,但我不确定该怎么做。我从很多人那里听说向量是存储动态值(例如物品,武器等)的好方法,但是我没有看到它的使用。
10 c++  text-based 

4
MonoGame的GUI库[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 是否有可与MonoGame一起使用的GuiLibrary?我知道有一些XNA的GUI库,但是我想大多数都不能在MonoGame中使用。 甚至像Buttons和Inputfields这样的简单东西也可以帮助我... 谢谢。
10 monogame 

2
2D寻路-查找平滑路径
我试图实现一个简单的寻路,但是结果不如我想要实现的令人满意。问题是像《星际争霸2》这样的游戏中的单位向所有方向移动,而在我的情况下,单位最多只能向8个方向(《魔兽争霸1》风格)移动,因为这8个方向直接指向下一个可用节点(它们从一个图块移动到下一个相邻图块) 。为了达到《星际争霸2》中的结果,我应该怎么做?缩小瓷砖尺寸? 在图片上,您可以看到水平方向的石头砖是障碍物,并且找到的路径标记为绿色砖。红线是我要实现的路径。

1
发送播放器速度更改时如何同步客户端和服务器?
我正在执行客户端预测。大多数说明都假定客户端发送诸如“ 将我的播放器上移1个位置 ”之类的消息。如果我发送诸如“ 将播放器的速度设置为x ”之类的消息怎么办? 在客户端上,播放器在服务器之前设置自己的速度(通过客户端预测),导致两者不同步。即使考虑平均延迟,此问题仍然存在。 我该如何解决?

3
存储十六进制网格
我一直在为Unity3D创建一个小的十六进制网格框架,并遇到了以下难题。这是我的坐标系(从此处获取): 除了我不知道如何存储外,所有这些都很好地工作。我最初打算将其存储在2D数组中,并使用图像生成我的地图。 一个问题是它具有负值(可以通过稍微偏移坐标来轻松解决此问题)。 但是,由于坐标系的原因,此类图像或位图必须是菱形的-并且由于这些结构是方形的,因此即使我一起砍东西,也会造成很多麻烦。我有什么可以解决的问题吗?我记得在统一论坛上看到过与此相关的论坛帖子,但我找不到链接。 在这里编写一组坐标翻译器是最好的解决方案吗? 如果你们认为这会有所帮助,我可以张贴代码和问题图像。

1
Z缓冲区的深度插值,带有扫描线
我必须编写自己的软件3d栅格化器,到目前为止,我已经能够将由三角形构成的3d模型投影到2d空间中: 我旋转,平移和投影点,以获得每个三角形的二维空间表示。然后,我取了3个三角形点,并实施了扫描线算法(使用线性插值法)以找到沿三角形边缘(左右)的所有点[x] [y],以便可以水平扫描三角形,一行一行地填充像素 这可行。除了我还必须实现z缓冲。这意味着,知道三角形的3个顶点的旋转平移后的z坐标后,我必须对使用扫描线算法找到的所有其他点的z坐标进行插值。 这个概念似乎很清楚,我首先通过以下计算得出Za和Zb: var Z_Slope = (bottom_point_z - top_point_z) / (bottom_point_y - top_point_y); var Za = top_point_z + ((current_point_y - top_point_y) * Z_Slope); 然后,对于每个Zp,我都会在水平方向执行相同的插值: var Z_Slope = (right_z - left_z) / (right_x - left_x); var Zp = left_z + ((current_point_x - left_x) * Z_Slope); 并且如果当前z在该索引处比前一个z更接近查看器,则将颜色写入颜色缓冲区,并将新z写入z缓冲区。(我的坐标系是x:左->右; y:上->下; z:脸部->电脑屏幕;) 问题是,它陷入了困境。该项目在这里,如果您选择“ …

3
如何在基于组件的游戏中更新实体状态和动画?
我正在尝试设计一种基于组件的实体系统,以供学习(以及以后在某些游戏中使用),并且在更新实体状态时遇到了一些麻烦。 我不想在组件内部使用update()方法来防止组件之间的依赖关系。 我目前要记住的是,组件保存数据,而系统更新组件。 因此,如果我有一个简单的2D游戏,其中包含一些具有“变形”,“运动”,“状态”,“动画”和“渲染”组件的实体(例如玩家,敌人1,敌人2),我认为我应该拥有: 一个MovementSystem,用于移动所有Movement组件并更新State组件 还有一个RenderSystem,用于为每个状态更新Animation组件(animation组件应具有一个动画(即一组帧/纹理),并对其进行更新意味着选择与当前状态相对应的动画(例如,jumping,moving_left等),以及更新框架索引)。然后,RenderSystem使用与每个实体的Animation的当前帧相对应的纹理更新Render组件,并将所有内容呈现在屏幕上。 我已经看到了一些像Artemis框架的实现,但是我不知道如何解决这种情况: 假设我的游戏包含以下实体。每个实体都有一组状态和每个状态一个动画: 播放器:“ idle”,“ moving_right”,“ jumping” 敌人1:“上移”,“下移” 敌人2:“向左移动”,“向右移动” 为了更新每个实体的当前状态,最常用的方法是什么?我唯一能想到的就是为每个实体组分别具有单独的系统以及单独的State和Animation组件,因此我将拥有PlayerState,PlayerAnimation,Enemy1State,Enemy1Animation ... PlayerMovementSystem,PlayerRenderingSystem ...但我认为这很不好解决方案并打破了拥有基于组件的系统的目的。 如您所见,我在这里很迷路,因此非常感谢您的帮助。 编辑:我认为使这项工作如我所愿的解决方案是: 使statecomponent和animationcomponent具有足够的通用性,可用于所有实体。它们包含的数据将成为修改诸如播放动画或可用状态之类的修改器。–字节56 现在,我试图弄清楚如何设计这两个通用组件,以便我可以重用它们。可以为每个状态(例如,步行,跑步...)设置UID并将动画存储在地图中并由该标识符作为键的AnimationComponent中吗?

1
SDL一次绘制多个表面
我正在尝试编写一个平台游戏,其中将关卡背景的精灵分解为512x512块。我一次在内存中保留了3个块,我正在尝试编写代码以将这三个块都抹在屏幕上。这是我当前的代码: SDL_Rect where; where.y = -game->camera->y; where.x = -game->camera->x - MAP_WIDTH; SDL_BlitSurface(left_chunk, NULL, screen, &where); where.x = -game->camera->x; SDL_BlitSurface(center_chunk, NULL, screen, &where); where.x = -game->camera->x + MAP_WIDTH; SDL_BlitSurface(right_chunk, NULL, screen, &where); 我遇到的问题是,哪个块首先被弄污是唯一显示的块。其余的无法显示在屏幕上。我认为这个问题可能与alpha透明度有关,但是即使这些块根本不重叠,它们仍然无法消除。在代码的其他部分中,我一次将多个内容(例如字符和背景)拖到屏幕上,它们都可以正确显示。这部分代码是我遇到此问题的唯一区域。 如果我注释掉了left_chunk的行,它将变为:
10 sdl 

1
既然Device Central失效了,如何测试我的Flash Lite应用程序?
我正在尝试使用Flash Lite为我的只有诺基亚5530的女友制作一个简单的游戏,但我刚刚意识到在CS6中Adobe杀死了Device Central,所以我没有办法在没有设备的情况下对其进行测试(应该是一个惊喜)。 我还有其他测试方法吗?我知道我可以导出影片并使用Flash Player,但是Device Central允许我测试拖放和内存/处理器使用率,例如... tl; dr,是否可以使用Device Central替代旧版本设备中的Flash Lite?
10 flash 

3
博弈论与游戏开发之间是否有任何关系?
我是一名有兴趣学习Java游戏的Java程序员,最近我看了一本Wayne L.Winston写的关于运筹学的书。有一个关于博弈论的话题。 这是真正的数学。我只是一个应用程序开发人员,但是那本书对开始游戏职业有帮助吗?
10 java  game-theory 

3
当资源过多时,如何在游戏中打包资源?
我最近使用Allegro 5框架在C ++中创建了一个基本的Space Invaders克隆。完成之后,我意识到我有大约10个精灵,以及13MB的DLL。有些玩家甚至没有mingW DLL,这使得游戏非常混乱。 如何打包所有资源,以便可以轻松地向游戏中添加和删除数据,并减少资源占用的大小,基本上将它们放在一个位置?我正在使用代码块。
10 c++  assets 

1
Bullet Physics-从刚体直接投射光线(第一人称相机)
我已经使用Bullet实现了第一人称摄影机-它是具有胶囊形状的刚体。我只用了几天子弹,物理引擎对我来说是新的。我btRigidBody::setLinearVelocity()经常移动它,使其与世界完美碰撞。唯一的问题是Y值自由移动,我通过在移动物体之前将平移矢量的Y值设置为零来临时解决。这适用于所有情况,但从高处跌落时除外。 当身体掉落到一个高大的物体上时,由于平移矢量的Y值设置为零,因此您仍然可以四处滑动,直到停止移动并跌落到地面(仅在移动时才设置速度)。因此,为了解决这个问题,我想尝试从人体投射光线以确定世界的Y值,并检查该值与相机机身的Y值之间的差,并在出现以下情况时禁用或减慢运动速度:差异足够大。 我只是停留在投射光线并确定其撞击的世界的Y值上而有些困惑。我已经实现了这个回调: struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{ AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){} btVector3 m_rayFromWorld; btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; float m_closestHitFraction; virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) { if(rayResult.m_hitFraction < m_closestHitFraction) m_closestHitFraction = rayResult.m_hitFraction; m_collisionObject = rayResult.m_collisionObject; if(normalInWorldSpace){ m_hitNormalWorld = rayResult.m_hitNormalLocal; } else{ …

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.