忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

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

残り自機数を画像で表示するようにして、自機爆破処理を追加しました。
s-WS000480.jpg
爆破アニメはDetonation v1.2を使用して作成。
s-jikibakuha.jpg
自機爆破時はこの爆破と破片を同時に表示するようにしてみました。

自機爆破処理については、自機が死んでいる時間をカウントする変数を作って
例えばカウントする変数をcntとすると、cntが-1の時は生存とするとします。
自機が被弾した時はcnt=250として、毎フレームマイナスしていって、cntが250~150の間は
爆破処理を表示させて、自機表示や移動や当たり判定は無効にしておいて
(cnt<150の時に自機表示や移動や当たり判定処理を行うようにすれば良い)

cntが150以下~0以上の時は自機は表示させるのですが、いきなり当たり判定等を復活させると
ゲームとしておかしくなるので、cntが150以下~0以上の時は無敵時間として点滅させて
cntが-1になったら通常の動きになるようにしました。
つまりcntが-1の時だけ、当たり判定処理などを行うようにしておけば、cntが-1以外の時は無敵状態に
出来るって事です。

プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1241539875
**注意**
本プログラムを使用したことで発生した如何なる不都合に対しても、
作者は責任を追いかねますのであらかじめご了承ください。
******

ついでに自機が0になったらゲームオーバー画面を表示するようにしました。
s-WS000482.jpg
たいぶゲームっぽくなって来た気がしますね^^
そろそろ、どんなシステムにするか考えないといけません。とりあえず習作的な物を作ろうと
思っているので、スコアアタック的な物にしようと思っているのですが、弾幕にするか非弾幕にするか
いっそ、どちらも入れて選択出来るようにするか・・・悩みます^^;

PR

自機弾が当たった時や爆破時に破片が飛び散るようにしてみました。
s-WS000462.jpg
ちょっと画像では判り難いですが、こんな画像↓を作ってランダムで表示させてます。
551.GIF552.GIF553.GIF

画像自体はメタセコイアで作成しました。
s-WS000464.jpg
適当なオブジェクトを作って回転させながらレンダリングして作成しています。

オプション選択画面を追加して、キーコンフィグとウィンドウモード切替を実装してみました。
s-WS000448.jpg
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1241423847
初回起動時はウィンドウモードで立ち上がります。フルスクリーンにも変更出来ますが
何があるかわからないので、起動には注意して下さい。
私の環境では問題なく動いているようですが、何かあっても責任は持てません。

で、まずキーコンフィグやウィンドウモードのデータを保存&読み出しする方法について考えてみた。
最初に思いついたのはiniファイルを使った保存方法だったのですがiniファイルはテキストファイルと
同じなので編集が容易です。
キーコンフィグなどのプレイする人が変更しても問題ないデータなら良いのですが
変更して欲しくないデータの場合にiniファイルを使うのは向いていないので
何か良い方法はないかとググってみたらC言語なんでも質問サイトさんの「セーブデータの作り方」
に良い方法が書いてありました。
簡単に書くとfopen関数とfclose関数を使ってデータをバイナリデータとしてファイルに保存します。
しかも保存するデータを構造体で管理出来るので、いちいちデータ別に読み出ししなくても
一度に全てのデータを読み込めるので便利です。
ただ、fopen関数をVC++2005EEで使うと、fopen_s関数を使えとの警告が出ます。
この警告が出ていても動作は問題なかったのですが、なんか気持ち悪かったので
#define _CRT_SECURE_NO_DEPRECATE 1
と記述すれば警告は出なくなりました。本当はfopen_s関数を使うのが良いのでしょうね。

そしてバイナリデータとして保存したとしても、バイナリエディタなどで開けば変更は可能なので
本来は暗号化等をした方が良いのでしょうが、販売する訳でもないので
そこまでする必要もないかな?と思ってます。

後は、プログラムの起動時にデータを読み込んで、終了時に保存するように記述するだけでOK。
ただ、終了の仕方がEscキーを押した時と、タイトル画面でEXITを選択した時の2種類あったので
どちらの終了の仕方をしても保存出来るように、どちらの処理にも保存処理を追加しました。

で、保存&読み出し処理は出来たので、タイトル画面やオプション画面での選択プログラムを
作ってみました。
s-WS000447.jpg
XBOX360版の怒首領蜂大往生の選択画面をちょっと真似して作ってます。
ここで一つ問題が。
選択している文字グラフィックの部分を反転表示させたくて、SetDrawBlendMode関数の
DX_BLENDMODE_INVSRCを使おうとしたのですが、上手く動きませんでした。
公式ページに載っているのに何故???と思って公式ページの掲示板を見てみたら
何やらバグがあったようで最新版では修正されていたので、最新版を落として更新してみたら
ちゃんとDX_BLENDMODE_INVSRCが使えました。
・・・・・・が、ここでまた問題が。
DX_BLENDMODE_INVSRCを使っても、文字グラフィックが反転されません。
で、更に調べてみるとDX_BLENDMODE_INVDESTCOLORを使うと上手く反転される事が
解りました。
DXライブラリには非公開の関数?が多数あるようで、DX_BLENDMODE_INVDESTCOLORも
そのうちの一つみたい。
この非公開関数についてはDXライブラリのヘッダファイルに色々と書かれているみたいなのですが
ヘッダファイルを見てみても、なんのこっちゃわかりませんでした(汗)
まぁ、反転表示は出来るようになったのでエエか~と思ってます^^;

4キャラでノーコンクリア出来ました^^
s-5_3.jpg
スコアがかなり低いですね^^;
クリア順としてはローザ、ウィンディア、フォレット、キャスパーという感じ。
特にキャスパーはなかなかクリア出来ずに苦労しました。
個人的にはウィンディアがバランスよく使えてお気に入りです。

それにしても、このキャラの強さと稼ぎのバランスの調整が絶妙やなと感じました。
私のスコアをみると特に意識した訳でもないのに、スコアが低いキャラほど
簡単にクリア出来てるんですよね。
ゲームをプレイする時って、本気でプレイする時と、軽くプレイする時があると思うんですが
デススマイルズの場合は、自分である程度の難易度を調整出来るので、本気でも軽くでも
その時の気分によって、プレイスタイルを変えれるので起動率も上がりそうです。

そして、早くMBLを遊びたいのですが、次のアップデートが5月末~6月上旬との事なので
それ以降になるんですかねぇ。早く遊びたいです^^

自機のショットが敵に当たったら消滅アニメを表示させるようにしてみました。
まずはDetonation v1.2を使って消滅アニメを作成。
20.GIF
爆発の引力なども設定出来るので便利です。

で、この画像を自機ショットが敵に当たったら表示するようにしてみた。
s-WS000442.jpg
SetDrawBlendMode関数の加算ブレンドを使って光ってる感じにしてみたのですが
逆に目立ち過ぎかも。さりげなく表示されていた方が良いような気がするので
もうちょっと色々と変更してみたいと思っています。 
Twitter
カレンダー
07 2026/08 09
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
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]