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

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

ついにプチコン3号が配信開始されました!
とりあえず動作の限界が知りたくて簡単な弾幕STGプログラムを作ってみました。



自機1
自機弾60
敵1
敵弾400
BG4枚
を使って自機と敵、自機と敵弾、自機弾と敵の当たり判定を行っているのですが
殆ど処理落ちなく動いてしまって驚愕。
普通に弾幕STG作れてしまうスペックですw

ちなみにプチコンmkIIの時はこんな感じ↓だったので、いかにプチコン3号が進化してるかわかりますね。


しかもこの動画はFPS30ですしね。

で、今回も悩んだSPHITの使い方
基本的な考え方はコチラのエントリで書いていますが、プチコン3号では
SPHITSP(スプライト同士の判定)とSPHITRC(スプライトと矩形の判定)に変更
されています。
SPHITSPの当たり判定範囲はSPCOLで指定するのですが、説明には
「SPCOL 管理番号, Xオフセット, Yオフセット, 幅, 高さ, [スケール対応] , マスク」
となっていますが、ここで大事なのは最後のマスク
「0〜&HFFFFFFFF(ビット単位でグループ属性を管理)
 SPHIT系命令で、対象との判定時に互いのビットANDをとり、0であれば衝突していないとみなす。」
このマスクで同じグループにあるもの同士のスプライトの当たり判定を行うって事になります。

0〜&HFFFFFFFFと書いていますが&Hってのは16進数って意味です。
16進数だとややこしいので2進数に変換してみます。
変換はWindows標準の関数電卓(表示の所で選択出来ます)が便利です^^

今だとスマホのアプリとかでもありますね。

FFFFFFFFは2進数だと
1111 1111 1111 1111 1111 1111 1111 1111
16進数の0は2進数でも0ですがわかりやすく書くと
0000 0000 0000 0000 0000 0000 0000 0000
となります。
つまり、この0とFFFFFFFFを縦に並べてみて同じ場所に1があれば当たってると判定する
って事になります。

例えば自機を0000 0000 0000 0000 0000 0000 1111 1111
敵を0000 0000 0000 0000 0000 0000 1111 0000
敵弾を0000 0000 0000 0000 0000 0000 0000 1111
に設定したとすると…
0000 0000 0000 0000 0000 0000 1111 1111:自機=&H000000FF
0000 0000 0000 0000 0000 0000 1111 0000:敵=&H000000F0
0000 0000 0000 0000 0000 0000 0000 1111:敵弾=&H0000000F
となり、自機と敵、自機と敵弾は当たり判定を行いますが、敵と敵弾は当たり判定を行わない
設定となります。
プチコン3号では0が32個(32ビット)あるので32種類の別々の当たり判定を
行う事が出来るってことになりますが、普通は数種類もあれば充分。

2進数と16進数の変換が面倒くさいって時は16進数で考えて
0とFしか使わないようにすると解りやすいです。
&H000000FF
&H000000F0
&H0000000F
みたいに考えるとFがある場所でグループを判断出来るので便利です。

そして今回は画像のサイズを取得出来る命令があるのが凄く便利
それがSPDEF命令なのですがWebの説明書には
「SPDEF 定義番号 OUT U,V,幅,高さ,原点X,原点Y [,アトリビュート]」
(プチコン3号の説明書にはなぜか載ってない)
この命令で画像の幅と高さがわかるので
SPCOLの前にSPDEFで画像サイズを取得しておけばSPCOLの範囲指定も楽です。

SPDEF  定義番号 OUT U,V,W,H
SPHOME 管理番号,W/2,H/2
SPCOL  管理番号,-W/2,-H/2,W,H,TRUE,&H000000FF
みたいに書けるので、いちいち画像サイズを考えなくて良いですね。

あとはSPHITSPで判定したいスプライトの管理番号を指定すればOK
HIT=SPHIT (管理番号)
とすれば変数HITに当たったスプライトの管理番号が代入されます。
(当たっていない時は-1となる)
HIT=SPHIT (自分の管理番号、相手の管理番号)
とすれば個別に当たり判定を指定することも可能です。

って事でだいたいのスペックはわかってきたので、第三回プチコン大喜利に向けて
何か作ろうかと思っているのですがお題は「飛び出す」なんですよねー。
上の動画のような上下繋がった画面(XSCREEN4)は3D表示が使えないので
どうしようかなーと考え中です。
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
|-`).。oO(短形 は多分、矩形(くけい)だと思います
NONAME 2014/11/23(Sun)11:35:20 編集
無題
スプライトを生成(SPSET)した時点で
その画像サイズでSPCOLしておいて欲しいですね
mk2では、そんなだったわけですし、混乱します

というか、矩形範囲だけじゃなくて
もっと自由な形の当たり判定があるべきだよなあ、と
発売後、3号を触って3号の仕様を見て、思いました
NONAME 2014/11/24(Mon)06:24:04 編集
無題
NONAMEさん
ずっと短形だと勘違いしておりましたw
修正しておきます~
kt. 2014/11/24(Mon)11:15:32 編集
無題
NONAMEさん
自分的には画像サイズが取得出来るようになっただけでも大満足です(^^)
色んな形の当たり判定は自分の力で何とかしろって事ですかねw
kt. 2014/11/24(Mon)11:23:26 編集
Twitter
カレンダー
03 2024/04 05
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/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]