2d阵列跟踪播放器移动到实体周围的特定空间

问题描述

好吧,所以我需要一个数组的帮助,我有一个2D数组,玩家可以移动通过它,现在我随机生成一个实体,并且玩家应该能够与之交互。我有一条相当长的if语句,该语句跟踪玩家是否接近实体,但是无法在触发提示的地方增大范围。这个if语句很长,有时会缠住我的头,但这很令人沮丧,如下所示:

if(((getPlayerX() == getEntityX() - getPlayerRange()) || (getPlayerX() == getEntityX() + getPlayerRange()) || (getPlayerX() == getEntityX())) && ((getPlayerY() == getEntityY() - getPlayerRange()) || (getPlayerY() == getEntityY() + getPlayerRange()) || (getPlayerY() == getEntityY()))){

但是,当范围增加到2(从其认值1开始)时,此功能将不再起作用。我想实现这一点,以便具有较高范围的玩家仍可以与此实体进行互动。有没有一种更简单的方法可以更有效地做到这一点?

解决方法

那这样的事情呢?

int xDistance = Math.abs(getPlayerX() - getEntityX());
int yDistance = Math.abs(getPlayerY() - getEntityY());

if (xDistance <= getPlayerRange() && yDistance <= getPlayerRange()){ ... }

计算绝对距离,然后与玩家范围进行比较。

即使代码比当前版本更多,我认为即使在1的范围内,它也更具可读性。