主题:请教关于模拟现实世界的物体移动
dofordream
[专家分:30] 发布于 2006-01-14 21:22:00
如何实现一个图形对象在移动时不能穿过另一个图形对象
回复列表 (共3个回复)
沙发
iAkiak [专家分:8460] 发布于 2006-01-15 00:10:00
检测碰撞
板凳
dofordream [专家分:30] 发布于 2006-01-16 09:04:00
如何检测碰撞
3 楼
illusionjcw [专家分:1400] 发布于 2006-01-18 18:13:00
你可以通过下面的方法来实现(注意,该方法只适用于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个精灵在同一位置处的象素都不为黑色(或实际精灵的背景颜色)则可判断发生碰撞
我来回复