首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >2D游戏开发中的碰撞顺序

2D游戏开发中的碰撞顺序
EN

Stack Overflow用户
提问于 2013-11-06 14:40:45
回答 2查看 172关注 0票数 0

在我的2D类马里奥游戏中,我被一个关于碰撞的bug卡住了。

代码语言:javascript
运行
复制
public void collision() {
    if (Rect.intersects(Robot.rect2, r)){
        robot.setSpeedY(0);
        robot.setCenterY(tileY - 32);
        robot.setJumped(false);
    } else if (Rect.intersects(Robot.rect, r)){
            robot.setSpeedY(0); 
            robot.setCenterY(tileY + 32);
    } 
    updateRect();
    if (Rect.intersects(Robot.rect3, r)){
        robot.setCenterX(tileX + 32);
        robot.setSpeedX(0);
    } else if (Rect.intersects(Robot.rect4, r)){
        robot.setCenterX(tileX - 32);
        robot.setSpeedX(0);
    }

}

我的游戏中的碰撞是通过比较矩形来检查的。我的机器人的矩形: rect (底部碰撞,所以在我的机器人精灵的下半部分是矩形),rect2 (顶部碰撞),rect3 (左碰撞)和rect4 (右碰撞)。

我的游戏中的每个瓦片都以一个实例化的矩形r为边界。当我的机器人的矩形和瓦片的矩形相交时,我调用collision(),它设置了我的机器人的方向。

这就是我的问题:如果我的机器人在一个角落里,它处于底部碰撞和右侧碰撞,我向右移动,我的机器人移动到右边的瓷砖中,这就触发了底部碰撞,把一切都搞砸了。

切换底部/顶部和右侧/左侧碰撞的位置没有任何帮助,因为同样的问题也会发生,机器人落入地面,触发右侧/左侧碰撞。

从本质上讲,我需要一种同时运行这四种方法的方法。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-11-06 16:38:42

Yku正在尝试构建它,一次一个检查。为什么不像这样

代码语言:javascript
运行
复制
if(!Rect.intersects(robot.rect1) && !Rect.intersects(robot.rect2) && !Rect.intersects(robot.rect3) && !Rect.intersects(robot.rect4) 
{
    //act normally
} else {
    //collieion
}

你现在所做的就是检查一个方面,并在此基础上得出你的结果。

票数 0
EN

Stack Overflow用户

发布于 2014-02-21 09:53:50

是的,我在这方面也遇到了问题,在X轴上进行碰撞检测之后,您缺少的是调用updateRect();。我建议先检查X轴。这里有一篇关于基于瓦片的碰撞的很好的文章:http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19805679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档