Articles of 平台变形器

什么是碰撞检测的好方法,我检查碰撞,而不是碰撞

我的游戏的碰撞系统目前工作正常; 它可以让我testing一个实体或指定矩形的碰撞,但这还不够。 我使用Game Maker,它有碰撞事件很简单。 我想要做的不是检查与一切事物的碰撞,而是检查与一切事物的碰撞。 使用以前的方法可能会非常昂贵,检查每个对象,每帧的所有其他对象。 什么是碰撞检测的好方法,如果我碰到什么东西,我就可以上课了,可以决定怎么办?

二级游戏的大级别对象碰撞系统

我今天读了许多变体,并且总体上得到了一些知识,所以这里是我的想法在图片(可怕的paint.net的)的步骤。 我们需要开发网格系统,所以我们只检查附近的东西,执行简单的检查来削减深度检查,并在最后深入检查像每个像素的碰撞检查。 第1步 – 让p1 , p2是一些精灵,让我们先检查一下圆形碰撞 – 因为p1 , p2之间的距离太大,所以我们不需要太深的testing。 但是,如果我们不是2个,而是20个对象,为什么我们甚至需要在我们的视野外进行循环testing。 第2步 – 添加基本的列系统,现在我们不打扰p2如果它在一列远离p1列,所以我们甚至不做圆testing。 但是p3是在同一个col中,所以我们来做循环testing,这当然会失败。 第3步 – 让我们改良网格系统的网格系统,就像p1 , p2 , p3碰撞盒一样,所以我们在p1上面或下面切出一些东西。 这是一个伟大的事情,直到BIG OBJ这是一种平台。 它们比网格单元大得多。 圆testing会成功,但深入检查整个大obj将失败 而那部分我不能得到。 如何存储大对象的网格位置? 像4个大对象顶点的网格坐标? 而如果他们中的一个接近p1做圆圈检查大对象的中心那么成功的话会是深一层呢? 我做错了吗? 我可能的解决scheme

平台与Block的游戏冲突

我正在尝试创建一个平台游戏,并使用这些块进行错误的碰撞检测。 这是我的代码 // Variables GTimer jump = new GTimer(1000); boolean onground = true; // The update method public void update(long elapsedTime){ MapView.follow(this); // Add the gravity if (!onground && !jump.active){ setVelocityY(4); } // Jumping if (isPressed(VK_SPACE) && onground){ jump.start(); setVelocityY(-4); onground = false; } if (jump.action(elapsedTime)){ // jump expired jump.stop(); } // Horizontal movement setVelocityX(0); […]

像素完美的平台碰撞

我试图创建像素完美的碰撞检测,但我不知道如何处理碰撞时有一个跳跃。 在这里,我有一个示例图的图像: 但是,假设所有像素都是小碰撞点,那么也许我的假设是错误的。 我的意思是,在我的碰撞图中,y轴碰撞和x轴碰撞没有区别 。 我一直在处理每个轴的碰撞分割,但是当对角线跳跃已经完成时,这是不好的,因为在修正位置的时候,你会在x或者y中得到一个错误。 然后我想,也许我错了,我认为我不需要为像素碰撞types拆分。 我将在两个问题中继续: 我怎样才能处理一个平台的像素完美的碰撞? 如果我做得很好,如何管理X轴,Y轴的问题? PS:我的“玩家”使用箱子对撞机。

节省资源

我试图在Java上开发一个简单的平台游戏,我想知道是否更好地处理一个级别(玩家与地板,玩家与敌人ecc …)由一个级别处理程序类控制的所有元素级别或将关卡中的元素传递给每个元素,然后检查是否与自身发生冲突。

如何在斜坡上进行2D Raycasting

我有一个二维平台游戏,我的斜坡可以设置在任何角度,所以我设置了一个中间的射线指向地面的玩家来处理碰撞。 这在平坦的平台上工作得很好,但是当我把它旋转到一个斜坡时,玩家就会越来越偏移。 玩家在没有轮换的情况下掉到平台上(工作正常)。 玩家以角度落在平台上,玩家不旋转。 然后当我把玩家旋转到平台的角度。 正如你所看到的,玩家错位了。 我是否必须旋转连接到播放器的光线,然后将其推出平台? 或者这是矫枉过正,我做错了什么?

二维碰撞解决scheme:分别在每个轴上工作,但不是两者结合

我的碰撞检测方法是稳定的,每次都能检测到箱子碰撞。 然后是我正在挣扎的决心的一部分。 当我操纵播放器(瓦片)的x轴和y轴时,它完美地工作,但是当我单独在任何给定的轴上移动时,它只会发生作用。 如果我尝试在两个轴上移动,那么整个事情就会崩溃,并开始动作怪异。 我正在努力实现引力。 所以我对玩家的瓦片保持不变的下压力量。 这是当我意识到,当我在两个轴上施加力(因为重力在y轴上不断施加力)并且同时向右或向左移动玩家瓦时,我的碰撞解决方法失效。 我的碰撞在单独沿着每个轴移动的时候效果很好。 结果如下: 为了避免这种types的结果,我该如何处理碰撞解决? 我目前正在预测玩家的位置,然后我正在检查每个可以碰撞的瓦片。 如果我检测到一个碰撞,我沿着轴向移动播放器,碰撞被检测到。 这是我当前的代码,碰撞一次只能在一个轴上运行: void Tile_Player::Move(double delta, G3::Tile_Map *map) { int xvel = (this->xDirection * (G3::TILE_STEP * (delta/1000))); int yvel = (this->yDirection * (G3::TILE_STEP * (delta/1000))); G3::xy_pos predictedPos; predictedPos.x = this->tile_location.x; predictedPos.y = this->tile_location.y; predictedPos.x += xvel; predictedPos.y += yvel; bool collision_status = false; for (int […]

爪哇:二维角落碰撞的问题

我花了很多天为2D java平台游戏创建一个工作碰撞检测。 我终于在计算我的球员的角落,但系统仍然是越野车,我希望我们可以找出问题。 这是我的实体类的一部分。 首先,我计算实体正在移动的方向或正在下降或跳跃的运动,并确定我的dx和dy场。 之后,我通过计算拐角来检查碰撞,并且如果阻塞了实体,则将dx或dy设置为零。 最后,我通过在x和y位置添加dx和dy来执行移动: public abstract class Entity extends GameObject { //constants private final float GRAVITY = 0.2F; private final float MAX_FALLING_SPEED = 2.5F; private final float JUMP_START = -3.5F; //movement protected float dx; protected float dy; protected float speed; //movement action protected boolean right; protected boolean left; protected boolean falling; protected […]

允许玩家在没有阻力的情况下上下滑行

我试图实现一个平台游戏,玩家和关卡都是由任意多边形组成的。 一个要求是玩家可以在斜坡上静止不动,自由地上下走动。 对于碰撞检测,我一直使用分离轴定理(SAT)来计算玩家和环境之间的重叠。 问题在于解决阶段。 SAT给出了最小重叠的轴以及为了解决这个重叠而需要移动一个物体的数量。 这种方法导致玩家在斜坡上施加重力时向下滑动,或者当水平移动到斜坡时遇到阻力。 为了解决这个问题,我想通过应用最小的y偏移来解决碰撞: 对这个类似的问题的回答似乎提供了一些如何做的基础工作,但我不觉得我有我需要的所有信息。 这种方法如何适用于任意多边形? 我需要从哪个点计算重叠? 我是否具有计算分离轴所需的所有信息,还是需要计算其他值?

在这种情况下,斜坡和边缘究竟如何工作?

所以这种行为可能存在于其他游戏中,但是旧的Kirby游戏–Kirby's Adventure和Kirby's Dreamland 2–是我注意到的。 因此,在处理常规的块式平台时,Kirby的hitbox就像一个简单的矩形,就像你期待的那样,可以certificate你能站得住脚: 另一方面,在处理任何types的斜坡时,站在它们上面是这样的: 正如你所看到的,如果我们仍然使用矩形的hitbox,它将在地面的一半。 这种行为很容易解释,但是,购买形状像“钻石”或“加号”的hitbox。 (这可能是因为在斜坡上行走时,Kirby看起来并不像是在空中盘旋) 像这样的平台与“钻石”hitbox模型显示出完美的一致性: 但是,当然,第一个屏幕截图显示,不可能一直使用钻石形的投影盒,或者您可以从任何角落“滑动”,就好像在那里有斜坡一样。 事实上,像这样的阵型表明,它甚至不能基于特定的瓦片,至less不是“满”的瓦片。 (16×16,柯比的大小)(否则你不能沿着斜坡走) 我想到的另一个模型是,hitbox总是长方形的,但是游戏中的所有斜坡实际上是比地板更深的深度。 然而,在第三和第四个截图中的股份forms的平台使这个模型无效,因为那样你就不能像你在那里看到的那样站在顶端。 顺便说一句,在天花板上的斜坡对称地工作,在水阶段可以看到。 虽然玩家看起来很直观,但是我们如何编制类似的碰撞系统呢? 注意:我不是要求猜测柯比的内部运作(除非这里的某个人实际上已经开发了这些游戏的碰撞系统 – 不太可能)。 只是一个普遍的方法。