如果只有這些子彈,那看起來必然是很一般的,想想看,只有幾顆子彈,孤零零的從下面跑到上面。。。。。
gamebarrage彈幕類,用於建立一些酷炫叼的彈幕~~其實核心也就是通過一些數學公式,然後批量addbullet而已~~
先來看看型別的定義
public enum barragetype
初步就這四種,其餘的彈幕型別都可以通過這幾種組合出來
然後就是彈幕的具體實現
public class gamebarrage
/// /// 圓形彈幕
///
/// 是否為玩家子彈
/// 子彈型別
/// 子彈顏色
/// 中心點位置
/// 子彈移動速度
/// 子彈移動加速度
/// 每顆子彈的角度間隔
/// 延遲發射時間
public void createcircle(bool isown, int type, int color, vector2 position, float speed, float accel, int interval, float delay)
}/// /// 扇形彈幕
///
/// 是否為玩家子彈
/// 子彈型別
/// 子彈顏色
/// 中心點的位置
/// 扇形的起始角度(向右為0°)
/// 扇形的結束角度(順時針)
/// 子彈移動速度
/// 子彈移動加速度
/// 每顆子彈的角度間隔
/// 發射持續時間(為0表示瞬間發射所有)
/// 延遲發射時間
public void createrotateandshoot(bool isown, int type, int color, vector2 position, int startangle, int endangle, float speed, float accel, int interval, float duration, float delay)
}else}}
/// /// 直線交叉彈幕
///
/// 是否為玩家子彈
/// 子彈型別
/// 子彈顏色
/// 子彈數量
/// 開始地點一
/// 開始地點二
/// 交叉點
/// 子彈移動速度
/// 子彈移動加速度
/// 發射持續時間(為0表示瞬間發射所有)
/// 延遲發射時間
public void createcrossline(bool isown, int type, int color, int spawncount, vector2 beginpos1, vector2 beginpos2, vector2 crosspos, float speed, float accel, float duration, float delay)
}/// /// 直線彈幕
///
/// 是否為玩家子彈
/// 子彈型別
/// 子彈顏色
/// 子彈數量
/// 開始地點
/// 目標地點(用於確定方向而已)
/// 子彈移動速度
/// 子彈移動加速度
/// 發射持續時間
/// 延遲發射時間
public void createline(bool isown, int type, int color, int spawncount, vector2 startpos, vector2 targetpos, float speed, float accel, float duration, float delay)
}/// /// 隨機彈幕
///
/// 是否為玩家子彈
/// 子彈型別
/// 子彈顏色
/// 子彈數量
/// 子彈範圍
/// 子彈速度(包括方向)
/// 子彈加速度(包括方向)
/// 發射持續時間(為0表示瞬間發射所有)
/// 延遲發射時間
public void createrandom(bool isown, int type, int color, int spawncount, rangebox boundary, rangevector speed, rangevector accel, float duration, float delay)
}}
就來圓形彈幕來講解吧。
首先大家可以看看前面gamebullet,有個字段是用於延遲顯示的(就是說子彈已經新增了,只是必須要等到規定時間過去才能顯示出來)
解析來看具體的實現
public void createcircle(bool isown, int type, int color, vector2 position, float speed, float accel, int interval, float delay)
}
核心思想就是通過「極座標公式」算出不同角度對應的座標,然後生成子彈
具體的計算就是helper.getspeedwithangle,這個忘記的可以看前面章節,有寫~
通過累加angle,迴圈360°,然後計算出不同角度的速度方向和延遲就能建立圓形彈幕了
再來乙個用的最多的扇形彈幕
public void createrotateandshoot(bool isown, int type, int color, vector2 position, int startangle, int endangle, float speed, float accel, int interval, float duration, float delay)
}else
}}
原理和上面類似,只是需要注意的是時間延遲傳遞的是 (startangle-count)*wait+delay
其實就是通過計算出需要產生的子彈數量已經總的延遲,然後算出每乙個子彈的延遲時間。
這樣的效果就是,瞬間產生了一堆子彈,但是看到的是乙個個顯示出來,有一種旋轉著發射子彈的感覺。。。表達不好。。
有了這個東西,就可以看看 boss彈幕的生成了,其實就是用了這些函式而已
public static class bossbarrage
/// /// 直線型彈幕
///
///
/// 彈幕持續5秒
public static int line(gamebarrage barrage)
/// /// 連續兩撥錯開的扇形彈幕
///
///
///
/// 彈幕持續時間2秒
public static int twofans(gamebarrage barrage, vector2 position)
/// /// 左右兩邊出現相反的漩渦型彈幕
///
///
///
/// 彈幕持續時間4秒
public static int tworeverserotate(gamebarrage barrage, vector2 position)
/// /// 三個園型彈幕
///
///
///
/// 彈幕持續時間5秒
public static int threecircle(gamebarrage barrage, vector2 position)
}
**很多,只是通過一些數學計算,產生不同效果而已~~大家可以自由發揮~~
基於C 彈幕類射擊遊戲的實現 (五)主場景
這裡的的gamescene就是乙個用於管理所有物件的類。整個遊戲只有乙個scene 其實還有menuscene,loadscene之類的,但這裡沒有做,在下乙個遊戲 超級瑪麗 裡會有詳細的介紹 先來看看申明部分 public static gamescene mainscene null priva...
基於C 彈幕類射擊遊戲的實現 (三)子彈的實現
我寫部落格喜歡做完乙個東西,一口氣寫很多章。貌似這樣不太好啊 到這裡,我們似乎該讓主角上場了,好就讓我們來顯示一顆子彈吧 慢著,顯示子彈之前,我們需要小小的抽象一下,把遊戲中所有能顯示的物體抽象成gameobject,好處是什麼?好處是看起來很帥。當然不是,好處簡單來說,整合公共部分 利於管理 好吧...
基於C 實現的約瑟夫生者死者遊戲
約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得統一這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從他的下乙個人數起,數到第9人,再...