这个类的几种构造方法参数分别代表什么,有啥用呀?有没有大佬添加过这个ai我只知道第一个是实体自己,第二个是会向哪个生物攻击别的看不太懂

本帖最后由 OOTW_Z 于 2022-6-25 19:46 编辑
这三个构造方法是顺序调用补全默认输入的,以最终构造器也就是第三个构造器来讲:
targetclass是个生物实体,不能是玩家,否则该项ai一下判断不会激活:
这个实体被用于传入getEntitiesWithinAABB来获取一个list,同时传入的参还有AxisAlignedBB类,是通过FOLLOW_RANGE直接相关获取的,也就是生物的那几大基本属性之一,这个followrange是你传入的entitycreature内的
回到AxisAlignedBB类,内部参数是一个坐标域然后else里是判断对象是玩家
那么根据理性分析,大概功能是,判断该生物追逐范围内是否有指定生物,有就执行该生物的ai,否则再判断追逐范围内有无玩家,执行一段函数。
这三个构造方法是顺序调用补全默认输入的,以最终构造器也就是第三个构造器来讲:
targetclass是个生物实体,不能是玩家,否则该项ai一下判断不会激活:
这个实体被用于传入getEntitiesWithinAABB来获取一个list,同时传入的参还有AxisAlignedBB类,是通过FOLLOW_RANGE直接相关获取的,也就是生物的那几大基本属性之一,这个followrange是你传入的entitycreature内的
回到AxisAlignedBB类,内部参数是一个坐标域然后else里是判断对象是玩家
那么根据理性分析,大概功能是,判断该生物追逐范围内是否有指定生物,有就执行该生物的ai,否则再判断追逐范围内有无玩家,执行一段函数。
本帖最后由 OOTW_Z 于 2022-6-25 20:11 编辑
哥们再给我评个分吧,30金粒对于这个问题有点少啊我就想要升级

chance是改ai执行概率,排在我说的判断特定生物前判断使用
checkSight是是否检查视野,是就执行父类的检查视野是否能看到目标生物的代码块getEntitySenses().canSee(entitylivingbase)
功能理解的话应当是:目标生物进入范围后是否无视视野障碍物进行追逐的意思(闻着味就来了)
onlynearby也是一项检查if (this.nearbyOnly)
{
if (--this.targetSearchDelay <= 0)
{
this.targetSearchStatus = 0;
}
if (this.targetSearchStatus == 0)
{
this.targetSearchStatus = this.canEasilyReach(target) ? 1 : 2;
}
if (this.targetSearchStatus == 2)
{
return false;
}
}
return true;
其中的targetSearchDelay默认为0受canEasilyReach方法影响
this.targetSearchDelay = 10 + this.taskOwner.getRNG().nextInt(5);
可以看到会增加
这段是:先检查当targetSearchDelay小于0的时候置零,如果为0调用this.canEasilyReach(target) ? 1 : 2;
private boolean canEasilyReach(EntityLivingBase target)
{
this.targetSearchDelay = 10 + this.taskOwner.getRNG().nextInt(5);
Path path = this.taskOwner.getNavigator().getPathToEntityLiving(target);
if (path == null)
{
return false;
}
else
{
PathPoint pathpoint = path.getFinalPathPoint();
if (pathpoint == null)
{
return false;
}
else
{
int i = pathpoint.x - MathHelper.floor(target.posX);
int j = pathpoint.z - MathHelper.floor(target.posZ);
return (double)(i * i + j * j) <= 2.25D;
}
上面是canEasilyReach方法具体计算需要你自己分析了因为这个方法已经没有未知参数了
回到onlynearby检查,canEasilyReach(顾名思义即可)运算结束后,targetSearchDelay会被设置为1或者2,2的话会导致ai不激活
这就是onlynearby参数功能
checkSight是是否检查视野,是就执行父类的检查视野是否能看到目标生物的代码块getEntitySenses().canSee(entitylivingbase)
功能理解的话应当是:目标生物进入范围后是否无视视野障碍物进行追逐的意思(闻着味就来了)
onlynearby也是一项检查if (this.nearbyOnly)
{
if (--this.targetSearchDelay <= 0)
{
this.targetSearchStatus = 0;
}
if (this.targetSearchStatus == 0)
{
this.targetSearchStatus = this.canEasilyReach(target) ? 1 : 2;
}
if (this.targetSearchStatus == 2)
{
return false;
}
}
return true;
其中的targetSearchDelay默认为0受canEasilyReach方法影响
this.targetSearchDelay = 10 + this.taskOwner.getRNG().nextInt(5);
可以看到会增加
这段是:先检查当targetSearchDelay小于0的时候置零,如果为0调用this.canEasilyReach(target) ? 1 : 2;
private boolean canEasilyReach(EntityLivingBase target)
{
this.targetSearchDelay = 10 + this.taskOwner.getRNG().nextInt(5);
Path path = this.taskOwner.getNavigator().getPathToEntityLiving(target);
if (path == null)
{
return false;
}
else
{
PathPoint pathpoint = path.getFinalPathPoint();
if (pathpoint == null)
{
return false;
}
else
{
int i = pathpoint.x - MathHelper.floor(target.posX);
int j = pathpoint.z - MathHelper.floor(target.posZ);
return (double)(i * i + j * j) <= 2.25D;
}
上面是canEasilyReach方法具体计算需要你自己分析了因为这个方法已经没有未知参数了
回到onlynearby检查,canEasilyReach(顾名思义即可)运算结束后,targetSearchDelay会被设置为1或者2,2的话会导致ai不激活
这就是onlynearby参数功能
OOTW_Z 发表于 2022-6-25 20:10
chance是改ai执行概率,排在我说的判断特定生物前判断使用
checkSight是是否检查视野,是就执行父类的检查 ...
好的谢谢大佬,帮大忙了
