假設不做斜線運動的話,在提升轉彎速度是一件非常困難的事情。
所以這次的重心就放在斜線的運動上
繼上一篇座標轉換,將原本的4個絕對方向轉換成8個絕對方向
為了讓程式方向判斷,我讓這8個方向定義成角度,以方便在轉換成相對動作時,比較好思考。
絕對方向轉相對動作我是使用,現在的角度-過去的角度,即可求得相對動作。
不過比較需要注意的就是溢位的問題,所以需要加入一點判斷式
if ((現在的角度-過去的角度) >360) (現在的角度-過去的角度)-360;
else if ((現在的角度-過去的角度) <-360) (現在的角度-過去的角度)+360;
因為得到的都是角度,所以當現在的角度-過去的角度得到為-45度時,即可知道是右轉45度。
反之,現在的角度-過去的角度得到為45度時,即可知道為左轉45度。
在絕對方向轉相對動作大概有這幾種動作需要轉換
90度轉→連續的2個同方向的45度轉,可以視為1個90度轉的動作
45度轉
V-turn→斜線運動的90度轉,其實這和正常的90度轉差不多。
J-turn→45度轉+90度轉,可以視為一個135度的動作
U-turn→45度+90度轉+45度轉,可以視為一個180度的動作
以下是我定義的動作。
這是由直線變到斜線的動作
這是由斜線變成直線的動作
另外還2個U-turn的動作
大至上我的斜線動作已經完成,在規劃這些動作時,思考規劃動作是最浪費時間的。如果用以往的if then else 寫的話,可能真的會寫到爆掉,而且在維護上也非常困難。老大提供這個座標轉換的方式確實方便實用。
看著老鼠可以衝斜線,還滿開心的,接著可以挑戰轉彎的極速了。光增加了斜線運動,最短路徑的轉彎速度至少比以前提升30%~50%之多(我認為)。
或許有些人看到電腦鼠覺得沒什麼,可是當深入其中的時後,卻愈做愈覺得有趣。一直到現在,我心中的疑問老是:「為什麼別人的老鼠的動作可以這麼順暢,怎麼做到的」。等一步一步解開問題的時後,真的會豁然開朗。
下一步需要解惑的是,為何別人的斜線動作很smooth,而我的動作卻很急燥。哈,或許老鼠和主人的個性一樣,暴燥卻不肯安定。
太好了!加油!
回覆刪除