Tuesday, 22 June 2010

Crossover: 彈幕xWave I

看來這又是另一個大坑O▽O
今次的主題是彈幕
不知彈幕為何者請自行參考維基百科。
彈幕射擊遊戲在亞洲範圍內一般認為等同於2D平面射擊遊戲(包括捲軸射擊遊戲,和自由移動的平面射擊遊戲),因其中敵我雙方的子彈在螢幕上停留的時間較長且密度很高形成「幕狀」而得名。英語中有barrage、bullet hell、bullet curtain、manic shooter等稱呼,遊戲類型成為shoot'em all(全部射殺)。
然後今天的主要討論題目是--大量的敵彈會以一定的演算法有規則地射出,往往在畫面上排出幾何形狀。

「到底所謂的演算法是怎樣使得彈幕是避得過的呢?」
定義:
1)設遊戲畫面為一2D格點組成的圖。
2)不同的Layer:人物、我方攻擊及對方攻擊。
3)設人物只佔一格。(有效判定範圍)
4)每件物件(Object)之所佔空間不變,在連續的時間中恆佔一定格數,除非它離開可見(visible frame)範之內,此時則會消失。
5)在無限小的時間中物件最多移動一格,亦即其移動可視為連續而不會瞬移。
6)「有效攻擊」指對方攻擊與我方人物曾發生重疊,且重疊時間不為無限小。
7)擦彈量: 設s(t)為一粒彈在不同時間跟人物的距離。則擦彈量可視為每粒彈dt/s(t)的積分的總和。(單位:unit second,下稱us)例如一粒子彈在人物2格以外2秒(1us)與人物1格以外1秒(1us)的擦彈量一樣。在現實遊戲中只有當s(t)<某常數時才會算為有效擦彈,所以我們將擦彈量改為每粒彈dt/(s(t))^3的積分的總和,那麼當s(t)>3時每秒擦彈量少於1/27us,此時其貢獻量可被忽視。(注意s(t)恆大於1,而s(t)=0時是「命中」而非擦過,而且s(t)可表示為兩整數的平方和再開方。)

為了簡化計算我們先考慮幾種攻擊
1)single source斷斷續續的攻擊
2)會反射的攻擊
3)multi source

...待續

No comments:

Post a Comment