回 帖 发 新 帖 刷新版面

主题:请教关于模拟现实世界的物体移动

如何实现一个图形对象在移动时不能穿过另一个图形对象

回复列表 (共3个回复)

沙发

检测碰撞

板凳

如何检测碰撞

3 楼

你可以通过下面的方法来实现(注意,该方法只适用于2D图象碰撞检测)
假设精灵1坐标(AX1,AY1)-(AX2,AY2),精灵2坐标(BX1,BY1)-(BX2,BY2)则下列条件只要一条成立就不可能发生碰撞:
BY2<AY1
AY2<BY1
BX2<AX1
AX2<BX1
如果上面条件都不成立则有可能发生碰撞,下面是进一步的确认:
先计算2个精灵的重叠区域,表示为(CX1,CY1)-(CX2,CY2)
如果AX1<BX1则CX1=BX1,CX2=AX2,否则CX1=AX1,CX2=BX2
如果AY1<BY1则CY1=BY1,CY2=AY2,否则CY1=AY1,CY2=BY2
然后在分别扫描2个精灵为于重叠区域内的象素,如果这2个精灵在同一位置处的象素都不为黑色(或实际精灵的背景颜色)则可判断发生碰撞

我来回复

您尚未登录,请登录后再回复。点此登录或注册