Articles of 2d

Java Thread.sleep()VS获取最后和当前时间

我正在使用Java创建一个简单的游戏。 我没有使用任何游戏库。 我只是想知道在调用repaint()之前调用Thread.sleep(40)是否可以。 public void run() { while(isGameRunning) { try { Thread.sleep(40); repaint(); } catch(Exception e) { } } } 或者我应该使用: private long last_time = System.nanoTime(); private double ns = 1000000000/25D; private double delta = 0; @Override public void run() { while(Universe.IsGameRunning) { long time = System.nanoTime(); delta += (int)(time – last_time)/ns; last_time = time; […]

如何从图像中获取一个2Dvector地形以进行Java碰撞检测?

我正在尝试使用如下所示的地形来制作2D纯Java游戏。 在之前的游戏中,我使用了基于瓷砖的collsions,但现在我想使用基于vector的collsions,因为不平坦的地形需要小块瓷砖。 我想知道的是,我如何从上图中获取vector,以及如何使用它们。 对于第一部分,我可以手动测量每个坐标,如下所示,但特别是对于更详细的更详细的地图,这将是一个巨大的工作量。 我想知道是否有办法做到这一点更容易。 我见过的工具可以让你在图像上绘制vector,但是这些工具只能导出到像Box2D和Unity这样的引擎,这些引擎是用不同的代码语言编写的。 正如我之前所说,我只想使用Java。 对于第二部分,如果我有vector的坐标,我该怎么处理它们呢? 我以前使用矩形,但现在我需要使用连接每个坐标的线或多边形。 另外,如何检查玩家的多边形或矩形与形成地形的多边形或线条之间的碰撞? 当使用长方形时,我可以使用playerR.Intersects(terrainR) ,但我怎样才能做到这一点与地形? 一个易于理解的教程的链接也是一个很好的答案,特别是对于我的问题的最后一部分。 提前致谢。

如何在移动枪的方向射击子弹?

我正在与C#团结在一起工作。 我正在为移动设备开发2D平台。 我现在安装的方法是移动字符的一个操纵杆使得字符arm旋转,并使字母按下时射击枪。 哪一个工作正常。 但是我现在面临的问题是枪支子弹没有朝正确的方向发展。 目前,无论我把枪指向哪里,子弹都会走到尽头。 我已经尝试在raycats使用transform.right和transform.forward。 所有的结果都是一样的。 枪的火把点是一个空的游戏对象,脚本中的火点是一个转换点。 这是枪的一个孩子,所以我认为它会使用相同的旋转,但我不知道我需要说什么旋转我需要的raycast。 我试图将其更改为脚本中的GameObject,但得到了相同的结果。 如果有人可以请帮助,这将是grealty赞赏! 这里是raycast的拍摄function。 public void Shoot () { Vector3 firePointPosition = new Vector3 (firePoint.position.x, firePoint.position.y, 0f); RaycastHit2D hit = Physics2D.Raycast (firePointPosition, firePoint.transform.right, 100, whatToHit, 0f); Debug.DrawLine(firePointPosition, (firePointPosition)*100, Color.cyan); if (hit.collider != null) { Debug.DrawLine(firePointPosition, hit.point, Color.red); Enemy enemy = hit.collider.GetComponent<Enemy>(); if (enemy != null) { […]

SFML / GLSL中的轮廓着色器不起作用

我有一个SFML的问题。 此代码不起作用: uniform sampler2D texture; varying vec2 v_texCoords; float offset = 1.0/32; void main() { v_texCoords = gl_TexCoord[0].xy vec4 col = texture2D(texture, v_texCoords); if (col.a == 1) gl_FragColor = col; else { float au = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y -offset )).a; float ad = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y + offset)).a; float al = texture2D(texture, vec2(v_texCoords.x […]

2D自上而下RPG的地图逻辑表示的数据结构

我希望逻辑上代表一个二维自上而下的RPG使用二维列表(在python)结构的地图。 地图就像一个可变尺寸的国际象棋棋盘。 第一维表示地图的南北方向,第二维表示东西方向。 对于ij单元格的正方形地图,换句话说就是i列表的列表,每个元素包含j个元素,每个元素包含另一个variables列表,表示包含在地图的正方形单元格中的variables,如地形types,任何对象,占据它的角色等,可以在游戏过程中进行修改。 这是一个很好的练习,可以通过graphics引擎轻松解释并绘制地图吗? 我的头脑里有Python的游戏的逻辑部分,但是我对graphics引擎一无所知,并且不希望创建一些日后不易被graphics引擎转换的东西。 有没有人知道一个graphics引擎可以使用这个数据结构并基于它绘制? 它不需要在python本身,只要它可以在没有其他语言编程的情况下工作。

我的2D游戏有多less着色器?

我的2D OpenGL游戏将有5种不同types的对象我想呈现。 -文本 -AtextBured AABBs -untextured Polys 构图AABBs – 纹理Polys 文本将有自己的着色器,这很好。 我希望事情变得简单,而不是疯狂地减慢。 我愿意做一些批量的东西,比如可以一次绘制出来的Tiles,但是其他的东西会以不可预知的顺序绘制,因此需要一些状态切换。 Polys需要一个matrix作为一个统一的旋转,但显然AABBs不会。 所以我不确定他们是否需要分开。 我想到的一种方法是使用3个着色器。 一个用于文本,另一个用于渲染带纹理和无纹理的多边形和AABB。 对于AABB,我可以传递一个单位matrix,而不是一个旋转matrix。 另一种方法是有5个独立的着色器。 我关心不同的着色器之间的切换量,因为我已经知道我的GUI渲染器将不得不在渲染文本和AABB之间切换(尽管我不希望超过几十个总的部件和容器)。 由于瓦片将被批量处理,并且是我游戏中最多的对象,所以我希望最多可以less于150个不同的绘制调用(使用着色器和纹理切换)。 只是想知道两者之间的哪个方法似乎是最明智的,或者如果有另一个建议。

Unity 5 2d磁铁通电

我做了一个硬币和电源的汽车游戏,但我写了一个代码磁铁电源,但在开始工作正常,但后我上电磁铁表面我收集的所有硬币,但在此之后不再产生硬币,并显示我这个错误:图片1.在这里我的代码: //Car script //PowerUp Magnet Sector public bool magnetPowerUp = false; public float MagnetDuration; private void OnCollisionEnter2D(Collision2D col) { //Magnet if (col.gameObject.tag == "Magnet") { col.gameObject.SetActive(false); StartCoroutine(Magnet()); } } IEnumerator Magnet() { magnetPowerUp = true; yield return new WaitForSeconds(MagnetDuration); magnetPowerUp = false; } //CoinScript using UnityEngine; using System.Collections; public class CoinSpaws : MonoBehaviour { public […]

我应该如何重新装球?

我正在使用Unity和C#制作愤怒的小鸟2d类游戏。 我从弹射器扔出球后,我不知道重新装球。 然后,我使用SceneAsync来重新加载球,但这是我所做过的最糟糕的事情,因为我不能让其他精灵对象在投球后继续移动。 那么抛球后我应该用什么代码来重新加载球?

不要在网格上正确放置切片

我最近创建了一个地图编辑器,我遇到了一个问题:我不能在某些网格块上放置一些图块,但是如果我离Y轴接近0,我可以正确放置图块。 这是video: Test_001 Map.cpp – createBlock函数 void Map::createBlock(sf::Vector2f position, std::string name) { double gridPositionX = floor(position.x / grid) * grid; double gridPositionY = floor(position.y / grid) * grid; double ceiledGridPositionX = ceil(gridPositionX); double ceiledGridPositionY = ceil(gridPositionY); int mapPositionArrayX = ceiledGridPositionX / grid; int mapPositionArrayY = ceiledGridPositionY / grid; sf::Vector2f gridPosition( ceiledGridPositionX, ceiledGridPositionY ); if (!isPositionOccupiedByBlock(mapPositionArrayX, […]

Unity无法有效分割spritesheet

我对游戏开发非常陌生,并且发现在opengameart.org上分割spritesheets非常困难。 所有这些都没有任何固定的网格混杂在一起。 我从总是使用精心组装的精灵表单和Unity学到的资源在自动分割它们时没有问题。 但几乎所有的都是随机放置的,Unity不能分割它们。 例如: 下面是统一的自动分割: 你们如何从这些精灵的统一中得到精灵? 一些指导将不胜感激。 谢谢