まったくのプログラミング素人の筆者が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
何か考え方間違ってる気もしますが、今のところ上手く動いているので良しとします。
今の所こんな感じです↓
当り判定なんかも入れてい行くと、やっぱり8000発弾を撃つとかは無理そうでした^^;
それでも、標準命令で作るよりは全然早いです^^
当初、スプライトの総数を10000って定義してたんですが、そうするとスプライトを使い切ってなくても処理落ちしてしまうって
事に気づかずに、相当悩みました・・・
ちょっとでも軽くする為には、無駄なスプライトを作らないように良く考えて作らないといけませんね。
それに、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
何か考え方間違ってる気もしますが、今のところ上手く動いているので良しとします。
今の所こんな感じです↓
当り判定なんかも入れてい行くと、やっぱり8000発弾を撃つとかは無理そうでした^^;
それでも、標準命令で作るよりは全然早いです^^
当初、スプライトの総数を10000って定義してたんですが、そうするとスプライトを使い切ってなくても処理落ちしてしまうって
事に気づかずに、相当悩みました・・・
ちょっとでも軽くする為には、無駄なスプライトを作らないように良く考えて作らないといけませんね。
PR
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
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 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事