まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
昨日作ったスプリクトで弾は発射されるようになったけど連射が上手く出来なかった。
上手く出来なかったってのは、連射はするんだけど連射速度が速すぎて10発撃ってるはずなのに
連射が早すぎて殆ど一発にしか見えなかった。
で、色々といじくってみたけど上手くいかず、どうしたもんかとネットを検索していると
遊々窓々さんと言うサイトを発見。ここのHSP講座を見てやっと上手く連射出来るようになった^^
ちゅうか、ここのHSP講座すげーわかりやすい!ソースも公開しておられるし、筆者のような初心者は必見の内容です。
で連射はどうするかと言うと、今までは一回のループで全発発射していたので、処理が早すぎて
おかしな事になっていたので、弾の発射処理を3回のループに1回行うように(5回に1回でも10回に1回でも連射速度によって変えればOK)
すれば自分の思う連射速度に調整出来る。んで、Zキーを押してる時だけ弾の発射処理を行うようにすれば・・・
おお!無事、ボタンを押してる間だけ連射されてる!
このスプリクトで言えば、shottimeの数値を変えるだけで、連射速度も自由自在。
で、昨日のスプリクトのままだと透明化処理が出来なくて、これまたおかしな事になってたんだけど
これも、gcopyのまえにgmode 2と記述すれば0番の黒い色を勝手に透明化処理してくれてる。いやー良い感じです。
連射出来るようになったスプリクトはコレ↓昨日のスプリクトの自機弾発射処理の部分を差し替えるだけでOK
*************************************
;自機弾発射処理
shottime-- ;連射為の処理
ck_joystick ky,2048 ;Zキーのチェック
if ky&2048 : if shottime<0: st=1 ;Zキーが押されていて、かつshottimeが0以下の時、stに1を代入
repeat tmx ;repeat〜loop間をtmx回繰り返す
if tf(cnt)=0 : if st=1{ ;tf(cnt)が0の時=画面に弾がない時、かつstが1の時(Zキーを押している時){}内の命令を行う
tx(cnt)=px ;tx(cnt)(弾のx座標)にpx(自機のx座標)の値を代入
ty(cnt)=py-40 ;ty(cnt)(弾のy座標)にpy(自機のy座標)より40引いた値を代入。(弾と自機が重ならないようにする為)
tf(cnt)=1 ;tf(cnt)に1を代入。つまり画面に弾があると言う事
st=0 ;連射の為の処理
shottime=3 ;連射の為の処理
}
ty(cnt)-=10 : if ty(cnt)<-64 : tf(cnt)=0 :ty(cnt)=-64: st=0;弾を進めて画面から出たら弾を消す
if tf(cnt)=1{ ;画面に弾があるとき、{}内の命令を行う
pos tx(cnt),ty(cnt) ;自機弾の座標指定
gmode 2 ;透明化処理の為の命令
gcopy 1,192,0,64,64 ;;バッファ画面(ウィンドウ1)より自機弾画像をコピー
}
loop
*************************************
上手く出来なかったってのは、連射はするんだけど連射速度が速すぎて10発撃ってるはずなのに
連射が早すぎて殆ど一発にしか見えなかった。
で、色々といじくってみたけど上手くいかず、どうしたもんかとネットを検索していると
遊々窓々さんと言うサイトを発見。ここのHSP講座を見てやっと上手く連射出来るようになった^^
ちゅうか、ここのHSP講座すげーわかりやすい!ソースも公開しておられるし、筆者のような初心者は必見の内容です。
で連射はどうするかと言うと、今までは一回のループで全発発射していたので、処理が早すぎて
おかしな事になっていたので、弾の発射処理を3回のループに1回行うように(5回に1回でも10回に1回でも連射速度によって変えればOK)
すれば自分の思う連射速度に調整出来る。んで、Zキーを押してる時だけ弾の発射処理を行うようにすれば・・・
おお!無事、ボタンを押してる間だけ連射されてる!
このスプリクトで言えば、shottimeの数値を変えるだけで、連射速度も自由自在。
で、昨日のスプリクトのままだと透明化処理が出来なくて、これまたおかしな事になってたんだけど
これも、gcopyのまえにgmode 2と記述すれば0番の黒い色を勝手に透明化処理してくれてる。いやー良い感じです。
連射出来るようになったスプリクトはコレ↓昨日のスプリクトの自機弾発射処理の部分を差し替えるだけでOK
*************************************
;自機弾発射処理
shottime-- ;連射為の処理
ck_joystick ky,2048 ;Zキーのチェック
if ky&2048 : if shottime<0: st=1 ;Zキーが押されていて、かつshottimeが0以下の時、stに1を代入
repeat tmx ;repeat〜loop間をtmx回繰り返す
if tf(cnt)=0 : if st=1{ ;tf(cnt)が0の時=画面に弾がない時、かつstが1の時(Zキーを押している時){}内の命令を行う
tx(cnt)=px ;tx(cnt)(弾のx座標)にpx(自機のx座標)の値を代入
ty(cnt)=py-40 ;ty(cnt)(弾のy座標)にpy(自機のy座標)より40引いた値を代入。(弾と自機が重ならないようにする為)
tf(cnt)=1 ;tf(cnt)に1を代入。つまり画面に弾があると言う事
st=0 ;連射の為の処理
shottime=3 ;連射の為の処理
}
ty(cnt)-=10 : if ty(cnt)<-64 : tf(cnt)=0 :ty(cnt)=-64: st=0;弾を進めて画面から出たら弾を消す
if tf(cnt)=1{ ;画面に弾があるとき、{}内の命令を行う
pos tx(cnt),ty(cnt) ;自機弾の座標指定
gmode 2 ;透明化処理の為の命令
gcopy 1,192,0,64,64 ;;バッファ画面(ウィンドウ1)より自機弾画像をコピー
}
loop
*************************************
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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事