DirectX 弾幕増やす基盤がそれっぽくなりました
あいさつ
前回はちょっとふざけすぎた気がしているはかせです。
ただ反省はしているが後悔はしてないってやつなんで
これからもたまにあんなテンションで書きたいと思います。
(今回は違いますw)
今回のテーマ
さて前回ちょっとはっちゃけちゃったので今回はまじめに行きます。
ちょっと前にこんな記事を上げました。
DirectX 弾幕の初めの一歩を踏み出しました - はかせのラボ
ここで書いてあるように弾幕の実装そのものはベクトル計算なので
そこまで難しくないです。(凝った動きさせようとするとまた変わりますが)
なので今回は
①種類を増やす
②増やしたやつに差し替える
この二つをやっていきたいと思います。
弾幕の種類
これは簡単です。
//弾幕ベースクラス public: BarrageBase() {}; ~BarrageBase() {}; BarrageName GetName() const { return mName; } int GetBulletNum() const { return mBulletNum; } //発射待機中か bool IsCoolTime(int time) { return time % mCoolTime == 0; } //弾幕が打ち終わったか virtual bool IsBarrageEnd() = 0; //弾幕生成 virtual void CreateBarrage(BulletManager* manager,DXGameObject* player,DXGameObject* enemy) = 0; protected: //弾幕の名前を示すenum BarrageName mName; //弾を発射するフレーム間隔 int mCoolTime; //弾を発射する際に同時に打つ弾数 int mBulletNum; //弾速 float mBulletSpeed; //弾の角度を変える時に使う変数 float mAngle; //度数法表記の角度を弧度法表記の角度に変換する float ToRadian(float angle) { return angle * (float)(acos(-1.0f) / 180.0f); } //渡されたベクトルを正規化する void Normalization(float &x, float &y); //呼ばれた回数 int mCount;
こんな感じで前やった弾の生成を
まるっと別クラスにして抽象クラスにします。
あとはこのクラスの弾幕生成などを必要に応じて
具象クラスで書き換えればおkです。