Canvas进阶-5、碰撞检测

什么是碰撞检测?

碰撞检测,是物体与物体之间的关系。用来检测物体与物体之间是否发生了碰撞,例如:射击游戏,就是检测子弹与敌人的碰撞。

碰撞检测,主要归纳为以下两种实现方式:

  1. 外接矩形判定法
  2. 外接圆判定法

外接矩形判定法

当我们需要被检测的物体为矩形,或者形态接近于矩形,我们就可以把这个物体抽象为矩形,然后判断两个矩形是否发生了碰撞。实现该方法,我们需要做到两步:1. 找出物体的外接矩形 2. 对外接矩形进行碰撞检测。

请添加图片描述

📢 有些物体虽然看起来没有发生碰撞,但是在外接矩形检测法的规则下,它们就会被认定为发生了碰撞

在我们实际开发中,如果想要判定两个不规则的图形是否生了碰撞,是非常困难的!但是,我们使用“外接矩形法”去判断,将会特别简单,但是,“外接矩形法”有个明显的缺点,就是误差较大。即使是这样,它简单的判定方式可以减少我们的开发难度,依然备受欢迎,毕竟有得必有失,没有什么完美的算法,只能取最合适的算法

请添加图片描述

 init1() {
   
   
      class Ball {
   
   
        constructor(x, y, radius, color) {
   
   
          this.x = x
          this.y = y
          this.radius = radius
          this.color = color
          this.vx = Math.random() * 3 - 1 // 添加随机速度
          this.vy = Math.random() * 3 - 1
          this.opacity = 1
          this.lifeTime = 400 // 添加生命周期属性(毫秒)
          this.birthTime = Date.now() // 记录小球创建的时间
        }
        fill(context) {
   
   
          context.save()
          context.globalAlpha = this.opacity
          context.beginPath()
          context.arc(this.x, this.y, this.radius, 0, Math.PI * 2)
          context.fillStyle = this.color
          context.fill()
          context.closePath()
          context.restore()
        }
      }
      // 获取鼠标移动位置
      const mouseMove = element => {
   
   
        let mouse = {
   
    x: 0, y: 0 }
        element.addEventListener('mousemove', e => {
   
   
          let x 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值