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

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

DirectXに移行しようと思って、今までスプリクトを移植しているのですが、これがまた上手く動かなくて苦労してます・・・
それに、2進法で記述しなければならない命令などもあって、なかなか難しいです。
具体的にはes_flagと言う命令なのですが、コレを使うとスプライトの消滅などが出来るようなので
自機が死んだ時などに、敵の弾を消滅させる画像を表示させて、数フレーム後に消滅させたいんですが
この記述に2進法が使われているんですよね。

HSPDXFIXの説明書には
*************************************
flag値=
0 : スプライト未登録
bit 0-6 : 1〜127 カウントダウンタイマー
bit 7 : カウントダウン消失SWITCH
bit 8 : $100 スプライト表示ON
bit 9 : $200 スプライト移動ON
bit10 : $400 自由落下移動ON
bit11 : $800 BGとリンクして移動(未実装)
bit12 : $1000 ボーダー消去無効ON
bit13 : $2000 ボーダーXで反転SWITCH
bit14 : $4000 ボーダーYで反転SWITCH
bit15 : $8000 カウントダウンタイマー時点滅SWITCH
*************************************
flag値の記述方法がこのように書いてあるのですが、なんのこっちゃわかりません。(汗)
んで調べてみるとbitってのは2進法での記述方法みたいで$ってのは16進法での記述方法のようです。(ちなみに2進法は%で書くようです)
2進法というのは、0と1しか使わないって事です。0がOFFで1がONになるんだと思います。
筆者もあまり良くわかっていないのですが、HSPは16ビットみたいなので、0が16個あると考えて
上の説明書の「bit 0-6 : 1〜127 カウントダウンタイマー」ってのを考えてみます。

まずwindowsに標準で入っている電卓を立ち上げます。んで表示を関数電卓に変更すると
2進法、16進法、8進法、10進法が計算出来ます。(こんな機能があったなんて!)
んで、10進法で127と入力して2進法のボタンを押します。すると答えは1111111と出ます。
上記の説明書のbit 0-6ってのは0が7つ並んでるって事だと思うので、0000000が10進法の0で
1111111が127だって事になるんでしょう。
んでbitは15まであるので、記述方法としては%0000000000000000って書いて、変更したい所のbitに1を記入すれば出来ました。

例えばこんな感じです→%1000001100011110
これで一定時間後にスプライトを消す事が出来ました。一番左側のbitを1にすると点滅したりも出来ます→%0000001100011110

何か考え方間違ってる気もしますが、今のところ上手く動いているので良しとします。
今の所こんな感じです↓
619.jpg
当り判定なんかも入れてい行くと、やっぱり8000発弾を撃つとかは無理そうでした^^;
それでも、標準命令で作るよりは全然早いです^^
当初、スプライトの総数を10000って定義してたんですが、そうするとスプライトを使い切ってなくても処理落ちしてしまうって
事に気づかずに、相当悩みました・・・
ちょっとでも軽くする為には、無駄なスプライトを作らないように良く考えて作らないといけませんね。

PR
どんな事でも、基本は大事だと思います。
なので最初は標準命令でゲームを作ってからDirectXに移行しようと考えていました。
でも音楽をTSSで鳴らそうとし始めると、処理落ちがかなり酷くなってきてしまいました。
で試しにDirectXを使ってみようと思って窓々遊々さんのHSP口座を読みながら、今までのボスサンプルを
ちょっと移植してみたんですが
もう、なんちゅうか、DirectX様様って感じです。ちゅうか最初からDirectXで作れば良かった。

とりあえず、こんな感じ↓
06171.jpg
(スプライトの表示の順番を間違えたので、ちょっとおかしいです)
これだけ弾を出しても、全然処理落ちしません。
画面の両端は半透明処理の黒で隠れてますが、実際には640×480をフルに使って動かしてます。
凄いですDirectX。偉いですHSPDXFIX。

HSPでDirectXを使用する為にはDivide by 0さんの所で配布されているプラグインのHSPDXFIXを使用すれば良いのですが
コレを使えば非常に便利な命令がいっぱい増えます^^
まずスプライトが使用できる。んで移動方向なんかも好きな方向に自由自在に動かせるし
当り判定もメチャクチャ簡単に判定出来てしまします。
FPSの表示もFPS表示用の命令があって、何も考えなくてもちゃんと表示してくれました^^
いや、もうこんな便利なプラグイン使わない手はありません。標準命令で作って行こうと思っていた筆者の考えは
アっと言う間に崩れました^^;
今までの苦労はなんだったんだ・・・て感じです。

こんなに弾を出しても処理落ちしないなんて素敵過ぎます↓
06172.jpg
弾の最大数8000発にしてます。実際に何発撃ってるかはわかりませんが^^;
自機の生存と消滅がなんとか上手く行くようになりました。
自機の消滅時間の変数を作って、そのカウント数で消滅させたり無敵時間を作れば上手く出来た。
自機が消滅した時に弾も消滅していたのは、その消滅カウントの中に弾の移動処理を入れていた為で、それを外に記述すればOKでした。

今の所こんな感じ
0614.jpg
フォントを変えてみました。
でも、Windowsに入っているフォントを使うと自分のパソコンでは良いのですが、使ったフォントが入っていないパソコンだと
標準のフォントが使われるようなので、これも画像を作って表示しないといけないみたい・・・難しそうだ。

それと、点数の表示が0点の時は00000000と桁数を表示させたくて調べてみるとstrf関数というのを使えば出来ました。
例えば8桁の数字を表示したい場合は mes strf("%08d",sc) というように記述すれば8桁の表示が出来ます(scは任意の変数です)
この"%08d"の部分を%dとか%fとかにすると実数なんかも表示出来るみたいです。

とりあえず、ある程度形になってきたので、ボスのサンプルを使ってタイトル画面などをいれてゲームとして成り立つような
スプリクトを作製中です。
んで、それに向けてボスの曲を作ってるんですが、ホント曲作るのは大変ですね・・・
とりあえず作りかけですが↓
*************************************

#F=l16/:7<d+d>gg ggb+g gb+ggb+ggb+ <dd+>ggggb+g ggb+gggb+g:/
<d+d>gg ggb+g gb+ggb+ggb+ <dd+>ggggb+g gg<drrrrr>
/:8<d+d>gg ggb+g gb+ggb+ggb+ <dd+>ggggb+g ggb+gggb+g:/;
t145;
%3 @o1,0 @i0,0 q16 o3 l8 v12 s10 k0 F(-12);
%3 @o1,1 @i0,0 q9 o3 l8 v10 s8 k0 F(36);
%3 @o2,0 @i1,1 q3 o3 l8 v15 s4 k0 F(-12);
%3 @o0,0 @i3,0 q16 o3 l8 v11 s30 k0 F(0);

#P=v9v,0s3d;#Q=v5s2d;#O=r1r1r1r1r1r1r1r1P;
#R=%3q1o7ns0ml5;#S=%3q1o5ns0ml4;#T=%2q1o4ns0;#FMB8(A)+C;RO;SO;TO;

#N=p3v2s25e;#Q=v4s2d;#O=r1r1r1r1l16/:12NNQ8:/r1/:3NNQ8NNQ8 NNQ8NNQ8 NNQ8NNQ8 NNQ8NNQ8:/
NNQ8NNQ8 NNQ8NNQ8 NNQ8NNQ8 NNQ8Nrrr
/:8NNQ8NNQ8 NNQ8NNQ8 NNQ8NNQ8 NNQ8NNQ8:/;
#R=%3q1o7ns0ml5;#S=%3q1o7ns0ml4;#T=%2q1o8ns0;
#FMB8(A)+C;RO;SO;TO;

#B=%5 @0 k5 p3 v12 o4 q1 ns4 s8,-24c;#S=%2 k100 v4 o4 q2 s10 c;
#D=r1r1r1r1r1r1r1r1l8/:3BrBrBrBr BrBrBrBr:/BrBrBrBr BrBrBBrr
/:8BrBrBrBr BrBrBrBr:/;D;k50D;

#M=r1r1r1r1r1r1r1r1/:3r4f4r4f4r4f4r4f4:/r4f4r4f4r4f4r8f4r8
/:8r4f4r4f4r4f4r4f4:/;
%3@i0,0@o1,0o5v13q0s8M;
%3@i3,0@o0,0o3v8q0s8M;
%2v10o3q0s8M;

#A=/:16r1:/v5v,2l8g1^1a1^1a+1^1<c1^1l16>g<dgd>g<dgd>g<dgd>g<dgd>g<dgd>g<dgd>g<dgd>g<dgd>
a<eae>a<eae>a<eae>a<eae>a<eae>a<eae>a<eae>a<eae>
a+<fa+f>a+<fa+f>a+<fa+f>a+<fa+f>a+<fa+f>a+<fa+f>a+<fa+f>a+<fa+f
cg<c>gcg<c>gcg<c>gcg<c>gcg<c>gcg<c>gcg<c>gcg<c>g;#FM D5(A+C2(B));
%3q16o5v11s10ns-12A;%3q16o5v9s8ns36A;
%3q10o5v13s1A;%3q16o5v10s30A;

#B=/:16r1:/v2v,5l8d1^1e1^1f1^1g1^1d1^1e1^1f1^1g1^1;#FM D5(A+C2(B));
%3q16o5v11s10ns-12B;%3q16o5v9s8ns36B;%3q10o5v13s1B;%3q16o5v10s30B;
*************************************
tsscp 0711使用

これに、まだ効果音も作らなければならないし大変ですね・・・
今までのスプリクトでは自機は一機のみで、死ぬとゲームオーバーにしていました。
でも普通は3機くらい自機があって、最終的に自機が0になったらゲームオーバーになりますよね。
コレを実現させようと思って色々と考えてるんですが、イマイチなんですよね。

まず、自機が死んだら爆風をだして、数秒の無敵時間を経て復活と言う風にしたいんですが、自機の生存を変数で考えてるんですが
この無敵時間ってのが上手く行かないんです。
しかも、現状のスプリクトだと自機が死んだ瞬間に自機弾も全て消えてしまっておかしいですし、難しいです・・・

とりあえず、自機も画像で表現出来るようにしました
0610.jpg
今まで数字でボムの数を表示してましたが、やっぱりおかしいのでボムカウント画像を作って表示させてみました。
デザインは暫定と言う事で(汗)
0604.jpg
Twitter
カレンダー
02 2026/03 04
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]