You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测移动图像与其他移动图像是否发生触碰碰撞

图形应用移动图像碰撞检测实现方法

核心检测原理

针对规则矩形的移动图像,业界最常用的是轴对齐包围盒(AABB)碰撞检测,逻辑简单、性能开销极低,非常适合多元素实时移动的图形场景:两个矩形只要在X轴、Y轴两个方向的投影都存在重叠,即判定为发生碰撞。

参考代码逻辑说明

下方是针对小车类游戏场景的简化版碰撞检测实现,适配对方车辆单向向玩家车辆移动的场景:

def check_crash():
    # 获取玩家车辆的左上角坐标
    (x,y) = c.coords(my_car)
    # 遍历所有敌方车辆
    for car in other_carss :
        # 获取当前敌方车辆的左上角坐标
        (car_x,car_y) = c.coords(car)
        # 第一步判断Y轴是否重叠:玩家车辆顶部低于敌方车辆底部,且玩家车辆底部高于等于敌方车辆底部
        if y < (car_y+ other_cars_height) and (y + my_car_height) >= (car_y+ other_cars_height):
            # 第二步判断X轴是否重叠:玩家车辆左边界在敌方车辆的左右边界范围内
            if x > car_x and x < (car_x + other_cars_width):
                # 触发碰撞后的业务逻辑:删除敌方车辆、扣除玩家生命值
                c.delete(car)
                lose_a_life()
    # 每100ms重复执行一次碰撞检测,和画面刷新逻辑对齐
    root.after(100, check_crash)

通用场景扩展

如果两个图像是任意方向自由移动的,替换为通用版AABB碰撞判断条件即可,适配所有矩形元素碰撞场景:

if (x < car_x + other_cars_width and 
    x + my_car_width > car_x and 
    y < car_y + other_cars_height and 
    y + my_car_height > car_y):
    # 此处写入碰撞触发后的逻辑
    pass

优化建议

  • 性能优化:如果移动元素数量较多,可以提前做空间分区,仅对同一屏幕分区内的元素做碰撞判断,减少无效循环
  • 精度优化:如果是不规则形状的图像,可以先用AABB做粗筛,再对粗筛命中的元素做像素级碰撞校验,平衡性能和检测精度
  • 逻辑优化:调整after方法的延时参数和你应用的画面刷新帧率对齐,避免出现碰撞漏判的情况

内容的提问来源于stack exchange,提问作者Reem Abd AlAziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:04