close

一顆笨火球居然花了蜻蜓兩天的時間才完成,實在是有點太誇張了。

fireballs.png

先來說說事情始末,原本是要幫魔王設計像上圖那樣的投擲火球的攻擊,看那張圖大概也猜得到,基本上就是直接丟在玩家頭頂的攻擊,蜻蜓之前寫的指令雖然可以打中目標,但會有"誤差"。

 

最初的作法是:

先用瞄準玩家位置的指令取得x和y的移動值,不過這次只取其中的x來用,y則是獨立用另外的變數"重力值"來計算。由於玩家只能左右移動,所以y值基本上只要讓它不要移動的太過詭異就可以,所以重點就在x值上啦。

理論上來說是可行(因為已經定位,所以x移動值是可以命中玩家的數值),但蜻蜓漏掉了所謂的"重力",用下圖說明:

dadsfasdf.png

吃紅點是玩家、綠點是敵人、黃線是"沒有重力值時火球的彈道"、藍線是"有重力值得彈道(拋物線)"。

問題就是黃線的情況中,可能這段距離需要花費T影格,也就是說火球的x值要花費T影格的時間才能大於或等於玩家的x值。

而藍線因為是拋物線,導致T影格時x值已到達定位但y值還在那邊重力加速度,造成上圖所出現的誤差。

 

那要怎麼樣才能消除掉誤差值呢,蜻蜓想了老半天、想破頭還是想不出辦法,後來找熱帶龍幫忙,他也沒有辦法解決。

害蜻蜓昨晚超級鬱悶,不過在一場混亂中有了新靈感,逆向思考成"計算火球拋出去y值碰到玩家所需的時間,去除以敵人和玩家的x距離"。好比說拋出去擊中玩家需要20影格,那x移動值就是以"20影格後才會大於或等於玩家的x值"。

 

這就牽扯到數學問題了,好在蜻蜓數學很強,雖然忘的差不多了,但只要上網查一下公式馬上又是一條活龍啦(笑)。而我們需要的就是等加速度的公式:

x = vt+(1/2)at^2

x是t時間後移動的距離、v是初速度、a是加速度、t是時間。

距離有了(玩家和敵人的距離值),初速度當然就是0,加速度可以自己設(所以也有了),沒有的數值就是時間,把以知的數值帶進去然後組合一下就變成了:

t^2 = 2x/a

所以呢,蜻蜓就直接把這個算式丟給flash自己去做計算,花了一點時間之後總算是順利完成了!!!

 

 

這是可行的(運作的很漂亮呢),唯一讓蜻蜓不了解的是因為加速度是設0.5,所以t應該會是"根號4乘以距離",但這樣也運作會有問題,蜻蜓再試把4改成6(別問為什麼,就是單純的嘗試),結果這樣反而可以精準命中玩家?!

完全不了解是哪裡出問題,這個6到底是怎麼出來了也是一的大謎團,不過既然都完成了那就管他去死吧,已經耗兩天了也有點懶得再追究。

 

也算是非常有成就感吧(笑)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 沙漠蜻蜓 的頭像
    沙漠蜻蜓

    神幻島+核果龍公會

    沙漠蜻蜓 發表在 痞客邦 留言(0) 人氣()