float
lenghtx =
m_attackmonomermajor
->
getpositionx
() -
this
->
getpositionx
();
//平方根函式
sqrtf
,根號2
等於1.4142135623731
float
lenghty = (
m_attackmonomermajor
->
getpositiony
() -
this
->
getpositiony
()) *
sqrtf(2
); float
lenght =
sqrtf
(lenghtx * lenghtx + lenghty * lenghty);
float
pointx = lenghtx / lenght;
//鄰邊/斜邊
float
pointy = lenghty / lenght;
//對邊/斜邊
float
angle_x =
acosf
(pointx) *
180/
m_pi
;
//角度
float
angle_y =
acosf
(pointy) *
180/
m_pi;
float
angle = angle_x; if
(angle_y > 90)
/**
這裡要借助三角函式來判斷滑鼠當前相對於人物的方向,也就是要求出下圖中角
a的值。
flash
的座標系和常用的直角座標系稍有不同,它的
y軸正方向是向下的,這裡要稍微注意一下。要計算角
a,先求出兩直角邊nx、
ny以及斜邊
r,然後求余弦
cos(a) = nx / r
,最後求反余弦並取整。取整是為了節省運算,整數運算相對於浮點運算要快得多,這在有大量運算時尤為突出。另外需要注意的是當滑鼠位於
x軸之上時,角
a會大於
180度,而反三角函式只給出
0~180
的解,所以需要做乙個轉換:
a = 360 - a
。詳細計算**如下:
var nx:number=mou***-man.x;
var ny:number=mousey-man.y;
var r:number=math.sqrt(nx*nx+ny*ny);
var cos:number=nx/r;
var angle:int=int(math.floor(math.acos(cos)*180/math.pi));
if(ny<0) */
主角人物移動(二) 朝向目標點
定義乙個gameobject,用於旋轉的物件。旋轉的物件最好為主角的子物件,如果旋轉的物件與移動的物件在同一transfrom,則會導致移動的混亂,因為旋轉的同時旋轉了座標的朝向。public gameobject playerrot transform.forward 為物件的正方向 若未改變y軸...
怪物朝向處理
目的是處理怪物一變走,一邊看向某個地方,這裡是攝像頭,指令碼放在怪物身上 debug.log camera.main.transform.position camera.main.transform.position quaternion newrotation quaternion.lookrot...
人物瞄準鬼畜問題
人物瞄準近距離的位置會出現鬼畜情況 根據 分析,發現如果diretion的起始位置為muzzleloc時 人物瞄準近距離時會鬼畜,而使用pawnloc時則不存在這樣的問題,問題在於muzzlelocation是乙個實時變動的值,它附著於人物 的槍口上,所以在瞄準近距離的地方時,方向向量的變化會非常大...