2D盒子碰撞,平台游戏,我的玩家"hovers"在方块上
2D Box-Collisions, Platformer, my player "hovers" over blocks
如果我将玩家的"hspeed"变量(水平速度)设置为足够慢的速度,然后,当他越过16x16块的空隙时,他将按计划摔倒。然而,如果我把"hspeed"变量设置得足够高,他会跑得太快,以至于在上面徘徊。尽管当我将其设置为慢速时它是有效的,但它太慢了。
以下是一个示例:http://img199.imageshack.us/img199/2685/demondj.png
这是我的冲突代码(在块列表中循环):
for(unsigned int i = 0; i<blocks.size(); i++){
Block &b = blocks.at(i);
if(!b.passable){
//Check if we are on the sides
if(y + height + vspeed >= b.worldY+2 && y + vspeed <= b.worldY+b.height)
{
//Right side
if(x + hspeed <= b.worldX+b.width+1 && x + hspeed > b.worldX+b.width + hspeed-1)
{
x = b.worldX + b.width; hspeed = 0;
}
//Left side
if(x + width + hspeed >= b.worldX +1 && x + width + hspeed <= b.worldX + hspeed + 1)
{
x = b.worldX - width; hspeed = 0;
}
}
//Check if we are on the top or the bottom
if(x + width + hspeed >= b.worldX+1 && x + hspeed <= b.worldX+b.width-1)
{
if(y + height + vspeed >= b.worldY && y + height + vspeed <= b.worldY + vspeed + 1 && jumpstate=="falling")
{
y = b.worldY - height; jumpstate.assign("ground"); vspeed = 0;
}
if(y + vspeed <= b.worldY + b.height && y + vspeed >= b.worldY + b.height + vspeed + 1 && jumpstate=="jumping")
{
y = b.worldY + b.height; jumpstate.assign("falling"); vspeed = 0;
}
}
}
}
我的碰撞代码有问题吗?另一个问题是,当我碰到一个方块的底部时,它有点小故障。他应该马上弹起来,他确实弹了,但如果他在移动时碰到了盖帽的底部,他会感到紧张。
好的,这里有很多东西:
1) 神奇的数字太多了。不确定+2、+1等的确切含义。我想把它们看作常数。此外,我对操作顺序很偏执,所以我会把所有的东西都放在括号里,以防万一:)
2) 不确定你的vars是什么类型。假设浮动,但它们感觉像int。
3) 更大的问题是,您设计的代码无法很好地处理"大"速度。速度超过可冷却区域宽度/高度的物体不会被可靠地检测到。使用这种类型的冲突代码也不容易。这是你已经看到的一个副作用,我猜是捏造因素增加了你对其余部分的贡献
请考虑使用基于矢量的碰撞系统。将长方体的每条边视为线向量。然后,你可以做非常简单的数学运算来确定一个点是否从直线的一侧开始,到另一侧结束(叉积的符号),点的符号将判断该点是否在线段内。此外,它允许碰撞对象为任何形状,甚至可以很容易地将数学扩展到3D。这种系统对并行处理也比较友好。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 玩家加速穿越世界(C++)
- C++:如何根据地形高度更新玩家身高?
- 预测玩家输赢,博弈论问题
- C++对玩家进行排序
- C++ 如何处理所有可能的玩家移动输入?
- 玩家中的%是什么意思=(玩家%2)?1:2;
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 我在视觉工作室中制作了一个类似胭脂的游戏,我想显示玩家的生命值
- 在UE4中,玩家进行光线投射、击中物体并触发自定义事件C++
- 玩家移动和碰撞之间的交互问题
- 如何根据物体位置和速度,玩家位置和向前矢量计算左耳和右耳的音量?(3D声音)
- 如何让"Enemies"围绕玩家运行?
- 如何在TIC TAC TOE中检查获胜者,以及如何不让两个玩家进入同一位置
- 如何将相机移动并将其粘贴在玩家身上
- 如果(玩家[P] .setCoin(Gameboard,Input))将其命名为“在线”游戏板的攻击函数)
- 如何使用结构在 2d 数组中移动玩家对象
- 接受玩家输入
- 在 2D 阵列板中移动并防止玩家移出板
- 2D盒子碰撞,平台游戏,我的玩家"hovers"在方块上