这些是我用来检查敌人对象是英雄(工作代码)的“视野”之内:
/**
*
* @param localAngle - the current yaw of the Player
* @param angleTarget - the angle between the player and the target receipent of the attack -- use RotationHelper.angle() method
* @param offset - the difference in localAngle(hero) and angleTarget(enemy)
* @return
*/
public static float angleDifference(float localAngle, float angleTarget, int offset) {
float newLocalAngle = (convert180to360(localAngle) + offset) % 360;
AppLog.log("ANGLE_DIFFERENCE2", "localAngle(yaw, degrees, with offset): " + newLocalAngle + ", angleTarget: " + angleTarget);
float result = 180 - Math.abs(Math.abs(newLocalAngle - angleTarget) - 180);
AppLog.log("ANGLE_DIFFERENCE2", "result : " + result);
AppLog.log("ANGLE_DIFFERENCE2", "==================================");
return result;
}
public static float angle(Vector3 vectorA, Vector3 vectorB) {
return new Vector2(vectorB.x - vectorA.x, (-vectorB.z) - (-vectorA.z)).angle();
}
public static float convert180to360(float originalAngle) {
float newAngle = 0;
if(originalAngle < 0) {
newAngle = (originalAngle + 180) + 180;
} else {
newAngle = originalAngle;
}
return newAngle;
}
感谢@Menno Gouw为理念上得到角从Vector3。
和下面的代码是我如何使用这些辅助方法:
float angleTarget = RotationHelper.angle(hero.transform.getTranslation(hero.tmpVector), enemy.transform.getTranslation(enemy.tmpVector));
float angleDifference = RotationHelper.angleDifference(hero.transform.getRotation(playerObject.tmpRotation).nor().getYaw(), angleTarget, CHARACTER_TO_WORLD_ROTATION_OFFSET);
AppLog.log("ANGLE_DIFFERENCE2", " angle from point hero to enemy): " + angleTarget);
if(angleDifference < VIEW_ANGLE_THRESHOLD) { //use 'angleDifference < VIEW_ANGLE_THRESHOLD'
enemy.hurt(hero.stats.damage);
AppLog.log("HERO_STATE", "Enemy monkey hit!");
}
if(enemy.stats.hp <= 0) {
AppLog.log("ENEMY_STATE", "Dead monkey");
//TODO: Remove monkey from game
enemy.die();
instances.removeValue(gameObject, true);
}
希望这可以帮助你,如果你遇到了同样的问题。如果有改进或与此有关的问题,请随时进行更改。
感谢你的解决方案,看起来很简单。我正在寻找类似.angle()的东西。但是它将如何与Vector3或ModelInstances一起工作?因为我正在处理3D空间。 – hadez30
除非,我猜可能只是得到Vector3的x和z坐标(因为我使用Y坐标)? – hadez30
您可以从V3.x和V3.z创建一个V2。但V3应该也可以,也许偏航/滚动?但我的3D体验是有限的。 – Madmenyo