【Love2d从青铜到王者】第十二篇:Love2d之碰撞检测(Detecting collision)

本文介绍了如何使用Lua实现两个矩形(AABB)之间的碰撞检测。通过四个条件判断矩形是否相交:红色的右边比蓝色的左边更靠右,红色的左边比蓝色的右边更靠左,红色的底边比蓝色的顶边更靠下,红色的顶边比蓝色的底边更靠上。这些条件用于创建一个名为`checkCollision`的函数,该函数在Love2D框架中用于游戏开发中的碰撞检测。

在这里插入图片描述

系列文章目录



前言

在这里插入图片描述


🍇一、图像(Images)

1️⃣.图像(Images)

  • 假设我们正在做一个游戏,在这个游戏中你可以击落怪物。怪物被子弹打中就应该死。所以我们需要检查的是:怪物是在和子弹相撞吗?
  • 我们要创造一个碰撞检查功能。我们将检查矩形之间的冲突。这被称为AABB碰撞。所以我们需要知道,两个矩形什么时候碰撞?
  • 我用三个例子创建了一个图像:

在这里插入图片描述

  • 如果你还没有开启程序员的大脑,现在是时候了。第三个例子中发生了什么,而第一个和第二个例子中没有发生?

  • “它们在碰撞”

  • 是的,但是你得说得更具体些。我们需要计算机可以使用的信息。

  • 看一下矩形的位置。在第一个例子中,红色没有与蓝色碰撞,因为红色太靠左了。如果红色稍微偏右一点,他们就会接触。具体有多远?嗯,红色的右边是比蓝色的左边更靠近右边。这对于例3来说是正确的

  • 但对于例2也是如此。我们需要更多的条件来确定是否有碰撞。例子2表明我们不能向右走太远。我们到底能走多远?红色要向左移动多少才会发生碰撞? 当红色的左边是比蓝色的右边更靠近左边

  • 所以我们有两个条件,足以保证有碰撞吗?

  • 不,看看下面的图片:
    在这里插入图片描述

  • 这种情况符合我们的条件。红色的右边比蓝色的左边更靠右。红色的左侧比蓝色的右侧更靠左。然而,没有碰撞。那是因为红色太高了。它需要向下移动。多远?直到红色的底边比蓝色的顶边更靠近底边

  • 但是如果我们把它移得太低,就不会再有碰撞了。红色能下移多远,还能和蓝色碰撞?只要红色的顶边比蓝色的底边更靠近顶边

  • 现在我们有四个条件。这三个例子的四个条件都成立吗?
    在这里插入图片描述

  • 红色的右边比蓝色的左边更靠近右边。

  • 红色的左边比蓝色的右边更靠近左边。

  • 红色的底边比蓝色的顶边更靠近底边。

  • 红色的顶边比蓝色的底边更靠近顶边。

  • 是的,他们是!现在我们需要将这些信息转化为一个函数。

  • 首先让我们创建两个矩形。

function love.load()
    --创建两个矩形
    r1={
   
   
        x=10,
        y=100,
        width=100,
        height=100
    }
    r2={
   
   
        x=250,
        y=120,
        width=150,
        height=120
    }
end

function love.update(dt)
    
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森明帮大于黑虎帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值