スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【ゲーム開発】自機狙い弾実装

自機狙い弾

自機狙い弾を実装しました。
やっと敵に弾を撃たせる所まで辿り着いた…というか戻ってきた。

左下に現在生成されている弾の数を表示させました。
後で消すけど大体画面にどれくらい出すかの目安にしたいと思います。

自機狙いでちょっとしたアクシデンツが起こりまして、
atan2(atan2f) という関数は第一引数がYで、第二引数がXだと言う事を忘れてまして
デバッガで追ってもこちらに向いている訳でもなく…
全然違う方向に飛んで行っててあれれ~状態でした。

で、atan2f の関数仕様を見に行って思いだしました。
このままじゃまたミスるかもと思ったので関数を作りました。

float Atan2fRad(float X1, float X2, float Y1, float Y2)
{
return atan2f(Y2-Y1, X2-X1);
}


二点間の角度を返すための関数ですが、
第一・第二引数は双方のX座標、第三・第四引数は双方のY座標です。

これで、X, Y の関係で使えるのでOK!!と思ってたんですが
呼び出し側で Atan2fRad(敵のX, 敵のY, 自機のX, 自機のY);
こんな風に呼んでいたのに気付けなく15分くらい悩んでました('A
なんと恥ずかしい…。
くそう………ばかやろう。

ミスらないように作った関数でミスったら意味ないじゃないかorz


float Atan2fRad(const POSITION &Pos1, const POSITION &Pos2)
{
return atan2f(Pos2.y-Pos1.y, Pos2.x-Pos1.x);
}

どうせならこういう風にした方が使いやすいかなと言う事でこういう関数も用意しました。
atan2f は 角度が Radian で返ってきますので Degree で返す関数も用意しました。


今までのソースでは、何故かボスクラスが弾の生成を担当し、
かつ弾の更新までしている構成になっており、非常に使いにくかったです。
なので、今回の改編では、自機狙い弾クラスである CAIMING というクラスを用意し、
メンバメソッドである Create メソッドが呼ばれると与えた引数で初期化してくれます。

生成された弾は、弾を管理するマネージャー(CBulletManager)が保持するリスト登録されます。
後は CBulletManager がアップデートメソッドを呼んでくれるので弾が移動すると言う仕組みになってます。

生成クラスは生成だけやっとけっていう作りに改変です。
もし自機狙い弾のアレンジを作りたいなら、
これを派生して独自にメンバメソッドを持たせれば解決できそうかな~と。


とりあえず自機狙いが実装出来たので次は円形弾とか、渦巻き弾とか作っていきたいです。

この記事へのコメント

トラックバック

URL :

検索フォーム
プロフィール

DVDM

Author:DVDM
自作ゲームの開発過程ブログ。
赤髪愛なら誰にも負けない。

 
Pixiv バナー


ブロとも申請フォーム
最新記事
カテゴリ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
ブロとも一覧
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。