忍者ブログ
Admin*Write*Comment
35歳からのC言語ゲームプログラミング
[137]  [136]  [135]  [134]  [133]  [132]  [131]  [130]  [129]  [128]  [127
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

フォースの実装 ~その3~

フォースに、敵機、敵弾との当たり判定をつけました。
敵弾はフォースに当たると used フラグが降りて消えます(特殊弾は除く)。
敵機はフォースに当たると1フレームにつき防御力を表す変数 def から0.2引かれ、0になると破壊されます。
この実装に伴って、敵の持つ変数 def を int 型から float 型に変更しました。(小数点以下を扱うケースが出来たため)
これで、通常の敵弾とヤワな敵機に対してはバリアとして働くようになりました。
敵が硬い場合はフォースを突き抜けるまでに def の値を0に出来ないので防御壁にはなってくれません。

5bccf821.JPG










わかり難いですが、敵機がフォースに当たった瞬間です。
波動砲ではなく、フォースによって破壊されています。




その他の改善

最近フォース以外の処理にも少しずつですが手を加えて改善していっています。
まず、以前記事にも書いていますが、現在時刻を得たい時に毎回 GetNowCount 関数を使うのは効率が悪い気がします。
そこで、毎フレーム、1フレームにかかる時間を計測するためにループの先頭で呼び出しているGetNowCount関数1回で済むように改良しました。
そのフレーム中は、どの関数もこの時刻を現在時刻として使用します。
関数の呼び出しから、変数の参照への変更ですから僅かですが処理速度も上がるはずです。

他にも関数の設計を見直したり、少しずつですが手を入れています。
例えば円の当たり判定を行う部分を当たりならTRUEを返す関数に分けました。
2つの円の中心座標と半径を Circle_Coll 関数に渡すと結果が返ってきます。
また、この関数を効率よく使うために、敵機には画像表示座標と当たり判定の中心座標との差分をデータとして持たせました。
画面座標をX、Y、差分をCx、Cyとすると、関数に渡す座標はX+Cx、Y+Cyとなります。
これで当たり判定の関数は見た目にもスッキリしてわかりやすいコードになったと思います。

でも、まだ無駄があるんですよね(汗)
例えば、敵と自機、敵と波動砲の当たり判定は別の関数で行っていますが、敵を番号で検索しながら判定を行うので、この二つのような場合は同じ関数にしてしまえば使用中の敵番号の検索が1回で済む分効率的です。

ああ、あと三角関数の値もゲームスタート前に360度分配列変数に入れて、ゲーム内では一切sin、cosの計算をさせない処理も試してみたいんだよなあ・・・。

ま、ぼちぼちやりますわ。
PR
この記事にコメントする
お名前
タイトル
メール
URL
コメント
文字色
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret
この記事へのトラックバック
この記事にトラックバックする:
  • ABOUT
やってやれないことはないっ!たぶん・・・
  • カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
  • 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
  • プロフィール
HN:
Call my name
年齢:
50
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
  • バーコード
  • ブログ内検索
  • カウンター
  • アクセス解析
Copyright © 35歳からのC言語ゲームプログラミング All Rights Reserved.*Powered by NinjaBlog
Graphics By R-C free web graphics*material by 工房たま素材館*Template by Kaie
忍者ブログ [PR]