向量在游戏开发中有着重要的作用。可以说是基本功。用好向量,可以很快的算出两个物体之前的运动关系
最近在看一本游戏人工智能的书,马上就能在游戏中实践应用。
由于我使用的引擎是LayaBox,而引擎中没有向量计算相关的类,只好自己写了一下。只要原理搞清楚,也不是很难
最后附上源码,大家可以直接用
exportdefaultclass VectorTool {
/**向量相加,得到一个从a向量指向b向量末端的新向量 */publicstatic add(a:Vector2, b:Vector2):Vector2 {
let result:Vector2 = new Vector2();
result.x = a.x + b.x;
result.y = a.y + b.y;
return result;
}
/**向量相减,得到一个从b向量末端指向a向量末端的新向量 */publicstatic subtract(a:Vector2, b:Vector2):Vector2 {
let result:Vector2 = new Vector2();
result.x = a.x - b.x;
result.y = a.y - b.y;
return result;
}
/**向量乘以一个数,会使向量变长 */publicstatic mul(v:Vector2, num:number) {
v.x *= num;
v.y *= num;
}
/**向量点乘,用于计算两个向量之间的夹角 */publicstatic dot(a:Vector2, b:Vector2):number {
return a.x * b.x + a.y * b.y;
}
/**返回两个向量夹角(角度值) */publicstatic includedAngle(a:Vector2, b:Vector2):number {
let dotResult:number = VectorTool.dot(a, b);
let cosa:number = dotResult /(a.length * b.length);
let radian:number = Math.acos(cosa);
let angle:number = radian * 180 / Math.PI;
return angle;
}
}
exportclass Vector2 {
public x:number;
public y:number;
constructorx?:number, y?:number) {
this.x = x;
this.y = y;
}
/**向量的模(长度) */publicget length():number {
returnMath.sqrt(this.x * this.x + this.y * this.y);
}
/**向量归一化(标化) */public nomalize():void {
let len:number = this.length;
this.x /= len;
this.y /= len;
}
}
如有误希望大家指正,最后如果对您有帮助,也请支持一下我的小程序: