日期:2014-05-20  浏览次数:20690 次

人物跳跃与障碍物碰撞
本人初学,正在编个小游戏,在碰撞检测遇到点问题,人物跳跃后不能落到障碍物上,或者是落到了不能自己下来,求懂的人帮忙解决下,不胜感激
------解决方案--------------------
最普遍的就是矩形碰撞检测吧,不管是人物还是障碍物都是矩形,就是检测所控人物的矩形是否会与它移动路径上的障碍物矩形之间碰撞(矩形相交)
move() {
    if(!wouldCollide()) {
        moveOneStep();
    }
}

关键是wouldCollide方法实现是   当前位置+欲移动单位距离 是否与障碍物碰撞
------解决方案--------------------
感觉问题不少,我说一下我的观点:
首先是可读性差,不按面向对象封装,比如跳跃,就应该是属于人物对象的一个方法
物体的移动不要割裂出许多单独的方面,越统一的规则越好
再看逻辑,我看到的是:
if (flag) {
    if (sprite.collidesWith(gb.layer1, false)) {
        flag = false;
    }
    sprite.move(0, move_Y[i]);
}
是先检测了是否碰撞,如果碰撞了,但还是能移动,这里是不是有问题。

再说障碍物很多,是不是都要判断的问题,如果不判断怎么知道是否碰撞呢?你可能可以通过预先得知的障碍物位置而预制行动路线,首先这有点违背统一行动规则(有的是通过判断,有的是通过预制),其次要是存在事先无法知道位置的物体(比如移动物体),这种就失效,所以我认为还是通过判断的方式更简洁统一。