Questions tagged «2d»

2D是指二维空间,其中的坐标用X和Y值表示。

2
如何在XNA 4.0中正确设置Alpha透明度?
好的,我已经阅读了几篇文章,教程以及与此有关的问题。大多数人都指向不能解决我的问题的相同技术。我需要能够创建半透明的精灵(确实是texture2D)并使其覆盖另一个精灵。 我可以通过找到的代码示例来实现这一点,但是我对结果不满意,而且我知道有办法做到这一点。在移动编程(BREW)中,我们采用老式方法,并在渲染之前实际检查了每个像素的透明度。 在这种情况下,似乎将其下方的精灵与其上方的alpha混合在一起。这可能是我如何渲染纹理的产物,但是,正如我之前说的,所有示例都指向这一技术。在继续之前,我将继续粘贴示例代码。 public void Draw(SpriteBatch batch, Camera camera, float alpha) { int tileMapWidth = Width; int tileMapHeight = Height; batch.Begin(SpriteSortMode.Texture, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, camera.TransformMatrix); for (int x = 0; x < tileMapWidth; x++) { for (int y = 0; y < tileMapHeight; y++) { int tileIndex = …
14 xna  2d  c#  rendering  transparency 

2
尽管使用了Time.deltaTime,但移动似乎与帧速率有关。
我有以下代码来计算在Unity中移动游戏对象所需的转换LateUpdate。据我了解,我对的使用Time.deltaTime应使最终的翻译帧速率独立(请注意CollisionDetection.Move(),仅用于进行射线广播)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

1
在2D瓷砖地图上计算“视锥”的有效方法?
我正在尝试计算一个特定单位在面向地图上的某个方向(在一定范围和朝向范围内)时可以“看到”哪些区块。最简单的方法是向外绘制一定数量的图块,并对每个图块进行射线投射。但是,我希望有一些更有效的方法。图片说一千个字: 红点是单位(朝上)。我的目标是计算黄色磁贴。绿色块是墙(墙位于图块之间,很容易检查是否可以在两个图块之间通过)。蓝线代表的是类似我所说的“光线投射”方法,但我不想这样做。 编辑:单位只能面向北/南/东/西(0、90、180或270度),FoV始终为90度。应该简化一些计算。我在想有一种递归的/基于堆栈/基于队列的算法,但是我不太清楚。 谢谢!
13 2d  algorithm  tilemap 

4
如何用粒子实现软边缘区域
我的游戏是使用Phaser创建的,但问题本身与引擎无关。 在我的游戏中,我有几个环境,本质上是玩家角色可以进入并受到其影响的多边形区域。例如,冰,火,毒药等。这些区域的图形元素是颜色填充的多边形区域本身,以及适当类型的粒子(在此示例中为冰碎片)。这就是我目前正在实现的方式-使用覆盖有粒子图案的tileprite的多边形蒙版: 硬边看起来不好。我想通过做两件事来改进:1.使多边形填充区域具有柔和的边缘,并融合到背景中。2.让一些碎片离开多边形区域,这样它们就不会在中间切开并且该区域没有直线 例如(样机): 我认为模糊多边形可以实现1,但是我不确定如何处理2。 您将如何实施呢?

2
由于或尽管有大量图像,我是否应该使用Spritesheets?
我正在开发2D游戏,并且我有很多精灵。我使用3D动画和模型将其渲染为2D,从而使它们看起来像“ Fallout”或“ Diablo”。比手工绘制还容易,哈哈。 我已经不得不将帧速率降低到15fps,这是我可以降低的最低帧速率,而又不会使它们看上去不连贯。但是,由于24帧的平滑度令人难以置信,这令人感到悲伤。 我这样做的原因有两个: 1)减少硬盘空间。图片越少,我的整体游戏就越小。 2)减少RAM消耗。加载的图像越少,我越有可能避免导致RAM限制过大的问题。 但是,如果有一种方法可以压缩HDD空间和RAM中的图像,我会这样做。我之前已经对其进行过测试,从RGBA8888到RGBA5555的赠品在质量上几乎没有任何变化,而在TexturePacker程序中转换为RGBA4444时仅受到了一点打击。我目前不这样做,因为SFML似乎使用相同数量的内存,而不管它是哪种类型的.PNG图像。我研究了如何以不同的方式加载它,但是未能找到关于该主题的任何内容。 我已经阅读了很多有关如何处理2D视频游戏的内容。共识是压倒性的:将您的Sprite打包成更大的纹理以获得出色的性能!因此,我使用TexturePacker将微小的Sprite打包到更大的Spritesheet中。 但是,我计划每个角色有10-15个动画,移动5个方向,每个动画15-40帧(平均24个)。具有15个动画,5个方向,每个动画平均24帧;即每个字符1800个单独的帧。如果装在一张精灵纸中,则只能显示75张图像。(每个动画每个方向一个精灵表。15* 5) 对于游戏中一个巨大的老板角色,我不能使用Spritesheet,而必须编程一种仅一次加载一张图像的方法。我不知道我是否可以这样做以提高性能。 对于角色,我已经将它们打包在一张spritesheet中。对于单个角色来说,这似乎在大多数时间都有效,尽管有时会停顿。但是,我将其归因于我构思错误的代码,该代码交换了纹理,而不是预加载该角色的所有纹理。 如果我要预加载纹理,则对于精灵表来说是有意义的。我只能想象为每个角色预加载1800个小图像是一个坏主意。 但是,我想一次将它们流式传输到内存中是非常快的,所以我只需要一次在内存中有一个图像。这是否意味着在任何给定时刻我只会让每个字符消耗几个KB而不是45 + MB? 我想这会破坏我的性能,因为流传输必须非常快(每秒15张图像进出内存和渲染,每秒),尽管这些图像非常小-加载字符Spritesheets可能是一个更好的主意进入内存。但是无论如何,我将不得不为我的大老板角色编写一个类似于单图像流的渲染系统。 我一直在尝试,但这不是一个简单的过程。特别是考虑到我正在研究游戏引擎的其他部分,而这些部分现在还不处理图形。

4
更快的2D碰撞检测
最近,我一直在研究快节奏的2D射击游戏,但遇到了一个大问题。碰撞检测。当然可以,但是速度很慢。我的目标是:屏幕上有很多敌人,并且让他们彼此不接触。所有的敌人都在追逐玩家实体。他们中大多数人或多或少都拥有相同的速度,所以迟早他们都在追逐玩家时占据了相同的空间。这确实降低了娱乐性,因为对于玩家而言,似乎您只被一个敌人追赶。为了防止它们占据相同的空间,我添加了一个碰撞检测(一种非常基本的2D检测,这是我所知道的唯一方法)。 Enemy class update method Loop through all enemies (continue; if the loop points at this object) If enemy object intersects with this object Push enemy object away from this enemy object 这很好。只要我只有<200个敌方实体。当我靠近300-350个敌方实体时,我的帧频开始大幅下降。首先,我认为渲染效果很差,因此我取消了他们的平局。这一点都没有帮助,所以我当然意识到这是更新方法。它们更新方法中唯一重要的部分是每个敌人循环通过每个敌人的部分。当我接近300个敌人时,游戏会执行90000(300x300)步发信号。我的我的〜 我确信必须有另一种方法来解决这种冲突检测。虽然我不知道如何。我发现的页面涉及如何实际执行两个对象之间的碰撞或如何检查对象与图块之间的碰撞。我已经知道这两件事。 tl; dr?如何在实体的LOTS之间进行冲突检测? 快速编辑:如果有任何帮助,我正在使用C#XNA。

3
处理物理引擎中的同时碰撞的最佳方法是什么?
我正在用JavaScript编写2D物理引擎,以便可以了解有关视频游戏中物理的更多信息。我可以使它在刚体碰撞中正常工作,除非任何物体同时与两个或多个其他物体碰撞。 目前,对于每对碰撞体(A,B),我会根据碰撞冲量来修改它们的速度和角速度,并将它们相互推开,以使它们不会穿透。但是,对于涉及A的其他碰撞,碰撞检测和脉冲计算将是错误的。 我可以探索什么方法来使我的引擎针对3个以上的对象相互碰撞而工作?


2
确保可以解决带有电梯的房屋地图迷宫?
在我的游戏中,我们从侧面看到房屋的地板,英雄可以乘电梯-电梯可以向上(向下一个向上的电梯),也可以向下(向下一个向下的电梯),具体取决于箭头如图所示,并且总是有一对正好相连的两个电梯。尽管英雄可以水平自由移动,但这是英雄可以垂直移动的唯一方法。房屋地图是一个随机的11x5网格,其中包含不同的项目,并且在最左侧,最右侧以及有时在两个中间位置之一处设有不可逾越的墙: 我的问题:如何确保地图始终随机且始终可求解,并且英雄可以从最低层的左侧开始,始终可以通过最高层的任何向上举升离开地图? 为了值得,我正在使用Lua语言进行开发。非常感谢!
13 2d  maze 

1
如何在图块地图的顶部定义复杂的碰撞区域?
正如许多人所建议的那样,我正在使用Tiled地图编辑器为我的游戏创建地图,这特别棒,因为libgdx框架还提供了Tiled地图的API。 我知道我可以在地图编辑器中定义是否可折叠的图块,这样我就可以处理代码中的任何冲突。但是我目前处于需要将图块划分为可碰撞和不可碰撞区域的情况。我认为可以手动定义两个区域的边界点和界限,并以编程方式处理它。但这是很多耗时的工作。 因此,我在Google上搜索了很多东西,然后找到了这个物理身体编辑器。这似乎是使我上面提到的过程自动化的好工具。但是,该系统可以处理每个解压缩的图像,即使将图像解压缩以进行操作,我也不确定它是否可以正常工作。 我想知道是否有更好的方法来完成定义碰撞区域的整个过程。任何建议将不胜感激。

2
渲染图块时如何处理凹凸不平的图块?
这是我不确定要处理的地图。如您所见,顶壁比底壁和侧壁要大得多(这也是我的角落的问题,这些角落是奇怪的形状(更像是L,然后是正方形),以及比我当前的瓷砖大40x40px )。 我还附加了我要用于瓷砖的瓷砖板,以向您展示与其余瓷砖相比,边角和顶部的外观。 我在想的是,如果我使用图块的宽度和高度而不是设置的WxH,我也许可以使用与我相同的数组绘制它们?我不知道这将如何运作,但是具有不同值的方块会成为玩家/ NPC无法踩到的方块,那么这可能不是问题,再次我甚至不确定那是否可行解。 我的代码,以防您想了解我当前的处理方式:Map.java(pastebin)(edit:im 未处理它,意味着我目前在处理地图) tl; dr-如何获取2d外观的地图并更改为其他大小的地图?还是有更好的方法来做我想做的事情?谷歌搜索时应该寻找一种方法的名称吗?
13 2d  java  tiles  maps 

4
带撬的车辆物理
我将如何为可能失去牵引力的汽车创建汽车物理特性?我希望驾驶员的脚看起来很平坦,所以当您踩油门时,他们的汽车(后轮)的牵引力会松散,并且很难控制。我还希望能够在各个角落进行甜甜圈和“漂流”。 我还需要知道发生了多少“打滑”,因此我可以按比例添加烟雾和轮胎痕迹。 假设一个2D,自上而下的风格的汽车游戏。 谢谢
13 2d  physics 

2
如何使我的2D角色正常站立在斜坡上?
我已经在Unity3D(2D模式)中得到了这个角色...在一个看起来像这样的坡度中, 但是我希望角色沿着红线站立。 如何在Unity3d中制作? 我有这个设置。 我正在使用简单的Addforce进行运动...如果删除z位置约束,则会导致奇怪的运动,如滚动等等。

5
如何从全局坐标空间转换为局部空间?
给定一个名为的实体EntityA,我想定义一个局部坐标空间,其中的位置EntityA是原点,其航向矢量是X轴,航向矢量的法线是Y轴: 给定它们的全局坐标,我如何找到另一个实体在EntityA本地空间中的位置? 例如:EntityA的全局位置是(50,50),而的全局位置EntityB是(80,90)。那么EntityB在EntityA的本地空间中的位置是什么? 编辑:请轻松进行数学运算。

4
如何处理2D游戏中的任意大图像?
题 当您拥有使用非常大图像(大于硬件可以支持的图像)的2D游戏时,该怎么办?也许对这个问题有一些有趣的解决方案,这在我之前从未发生过。 我基本上是在从事某种图形冒险游戏的制作。我的目标受众是几乎没有游戏开发(和编程)经验的人。如果您使用的是这样的应用程序,是不是更希望它在内部处理问题而不是告诉您“拆分图像”? 语境 众所周知,图形卡对其可使用的纹理大小施加了一组限制。例如,使用XNA时,取决于您选择的配置文件,最大纹理大小被限制为2048或4096像素。 通常,在2D游戏中这不会带来太大问题,因为大多数游戏都具有可以由较小的单个块(例如,图块或变形的精灵)构建的关卡。 但是,请考虑一些经典的点按式图形冒险游戏(例如Monkey Island)。图形冒险游戏中的房间通常是整体设计的,很少或没有可重复的部分,就像画家在风景上一样。或像《最终幻想7》这样的游戏使用了大型的预渲染背景。 这些房间中的一些可能会变得很大,经常跨越三个或更多屏幕宽度。现在,如果我们在现代高清游戏的背景下考虑这些背景,它们将很容易超过最大支持的纹理大小。 现在,解决此问题的明显方法是将背景分成适合需求的较小部分,并排绘制。但是,您(或您的艺术家)是否应该成为拆分所有纹理的人? 如果您使用的是高级API,它是否应该准备好应对这种情况并在内部进行纹理的拆分和组装(作为XNA的内容管道等预处理程序或在运行时进行)? 编辑 从XNA实现的角度来看,这就是我的想法。 我的2D引擎只需要Texture2D功能的很小一部分。我实际上可以将其简化为以下接口: public interface ITexture { int Height { get; } int Width { get; } void Draw(SpriteBatch spriteBatch, Vector2 position, Rectangle? source, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth); } 我使用的唯一依赖Texture2D的外部方法是SpriteBatch.Draw(),因此我可以通过添加扩展方法在它们之间建立桥梁: public …
13 xna  c#  2d  graphics  textures 

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.