まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
とりあえずゲーム中の曲が出来たので、効果音を追加してみようと思って適当に鳴らしてみたのですが
効果音選びが非常に難しい事に気づきました(汗)
適当な爆破音なんかを追加してみたのですが、全然イメージと合いません・・・
爆破音意外にもアイテム取得音や1UP音などなど、追加しないといけない音は沢山あるのですが、結構悩みそうな感じです。
ちなみに、この効果音ですがHSPの標準命令のmmplayでは重ねて音を鳴らす事が出来ません。
重ねて音を鳴らす為には外部プラグインを使用する事になるのですが、私が使用しているのはMIAさん作の
HSP DirectSound Extensionです。
色々と他のプラグインも使ってみたのですが、一番上手く動いてくれて使いやすかったのがコレでした。
使い方は非常に簡単で、最初に#include "dsoundex.as"と記述してds_initで初期化。
で、ファイルをds_load "SHOT.WAV",0のような感じで読み込ませれば、後は慣らしたい場面でds_play 0と記述すればOK。
音量を変えたければds_vol 0,80とかにすれば変更出来ますし、ループさせたい時はds_loop 0とすればループ再生も可能です。
(バッファを指定すれば、好きな場所からのループも可能)
他にも色々と便利な命令がありお勧めです^^
効果音選びが非常に難しい事に気づきました(汗)
適当な爆破音なんかを追加してみたのですが、全然イメージと合いません・・・
爆破音意外にもアイテム取得音や1UP音などなど、追加しないといけない音は沢山あるのですが、結構悩みそうな感じです。
ちなみに、この効果音ですがHSPの標準命令のmmplayでは重ねて音を鳴らす事が出来ません。
重ねて音を鳴らす為には外部プラグインを使用する事になるのですが、私が使用しているのはMIAさん作の
HSP DirectSound Extensionです。
色々と他のプラグインも使ってみたのですが、一番上手く動いてくれて使いやすかったのがコレでした。
使い方は非常に簡単で、最初に#include "dsoundex.as"と記述してds_initで初期化。
で、ファイルをds_load "SHOT.WAV",0のような感じで読み込ませれば、後は慣らしたい場面でds_play 0と記述すればOK。
音量を変えたければds_vol 0,80とかにすれば変更出来ますし、ループさせたい時はds_loop 0とすればループ再生も可能です。
(バッファを指定すれば、好きな場所からのループも可能)
他にも色々と便利な命令がありお勧めです^^
PR
シューティングゲーム アルゴリズム マニアックスを買ってみました^^

この本、プログラム自体はVisual C++で作られているようで、ソースもVisual C++用で書かれているので
HSPで作っている私には関係ないかなぁと思っていたのですが、この本はアルゴリズムを説明する為にVisual C++を使っているだけなので
アルゴリズムを考える上ではゲーム作製に使っているソフトはあんまり関係ないんですよね。
もちろんVisual C++を使っている人の方が、この本は役に立つとは思いますが。
で、早速読んで見たのですが、シューティングゲームを作る上でのありとあらゆるアルゴリズムが解説されていて、なかなか面白いです。
例えば↓こんな感じで

図と座標でアルゴリズムの考え方について解説されています。
で、この図の解説プログラムってのが載っているのですが、計算部分の書き方はHSPと、それ程変わりはないので
十分理解出来る感じでした。
さらに、背景のスクロールやリプレイ再生など色々と解説されているので、もっと早くに買っておけばよかった・・・て感じです^^;
この本、プログラム自体はVisual C++で作られているようで、ソースもVisual C++用で書かれているので
HSPで作っている私には関係ないかなぁと思っていたのですが、この本はアルゴリズムを説明する為にVisual C++を使っているだけなので
アルゴリズムを考える上ではゲーム作製に使っているソフトはあんまり関係ないんですよね。
もちろんVisual C++を使っている人の方が、この本は役に立つとは思いますが。
で、早速読んで見たのですが、シューティングゲームを作る上でのありとあらゆるアルゴリズムが解説されていて、なかなか面白いです。
例えば↓こんな感じで
図と座標でアルゴリズムの考え方について解説されています。
で、この図の解説プログラムってのが載っているのですが、計算部分の書き方はHSPと、それ程変わりはないので
十分理解出来る感じでした。
さらに、背景のスクロールやリプレイ再生など色々と解説されているので、もっと早くに買っておけばよかった・・・て感じです^^;
リンク先のPlayLoud!!さんの所に興味深い記事がありました。
擬似モーションブラーのやり方について書いてあるのですが、こんな簡単な方法で実現できるのか〜!と目から鱗です^^;
具体的にはes_clsを行う所をes_exboxfで半透明の黒でクリア?
するようにするだけなのですが、それだけで↓こんな感じになってしまいます。

いや〜、たったこれだけでこんなに効果があるなんて、ちょっと感動してしまいました。
この効果を上手く使えば、ガルーダIIの覚聖絶死界みたいな事も出来そうで夢が広がりますね^^
擬似モーションブラーのやり方について書いてあるのですが、こんな簡単な方法で実現できるのか〜!と目から鱗です^^;
具体的にはes_clsを行う所をes_exboxfで半透明の黒でクリア?
するようにするだけなのですが、それだけで↓こんな感じになってしまいます。
いや〜、たったこれだけでこんなに効果があるなんて、ちょっと感動してしまいました。
この効果を上手く使えば、ガルーダIIの覚聖絶死界みたいな事も出来そうで夢が広がりますね^^
以前書いたスコアの保存方法を利用してハイスコアを保存出来るようにしました。
でも、まだランキング表示は実装出来ていません。ソートの方法がイマイチ上手くいかないんですよね・・・
ゲーム部分自体は、かなり出来て来ているので(1面のみですが・・・)そろそろ公開して順次アップデートって感じにしていきたいのですが
ゲーム中に使う曲がなかなか出来なくて、作業が進まない感じになっています(汗)
タイトルもいくつか考えたのですが、どうもしっくりこないし、何か変な所でつまづいてる感じです^^;
でも、まだランキング表示は実装出来ていません。ソートの方法がイマイチ上手くいかないんですよね・・・
ゲーム部分自体は、かなり出来て来ているので(1面のみですが・・・)そろそろ公開して順次アップデートって感じにしていきたいのですが
ゲーム中に使う曲がなかなか出来なくて、作業が進まない感じになっています(汗)
タイトルもいくつか考えたのですが、どうもしっくりこないし、何か変な所でつまづいてる感じです^^;
なんとかリプレイが上手く再生されるようになったようです^^;
でも、家の環境での話なので他の環境で上手く行くのかどうかはまだわかりませんが・・・
なにが原因だったかと言うと、やはり変数の初期化がおかしくて、具体的には配列変数の初期化が上手くいってなかったようです。
配列の初期化を↓のようにes_findを使ってやっていたのですが・・・
*************************************
enemy=0 ;検索開始番号
repeat
es_find enemy,0,enemy ;敵(8)スプライト検索
if enemy=-1 : break ;見つからなかったらループ終了
ef.enemy=0
et.enemy=0
espeed.enemy=0
reh.enemy=0
kaiten12.enemy=0
kaiten13.enemy=0
kaiten16.enemy=0
pang91.enemy=0
jikitamaname.enemy=0
eh.enemy=0
ename.enemy=0
eneh.enemy=0
enehx.enemy=0
enehy.enemy=0
eff.enemy=0
es_kill enemy
enemy++
loop
************************************
この方法だと完璧に全ての配列変数が初期化されてなかったようで
↓のような方法で全ての配列変数を0にするように変えると上手く動くようになりました。
*************************************
enemy=0 ;検索開始番号
repeat
ef.enemy=0
et.enemy=0
espeed.enemy=0
reh.enemy=0
kaiten12.enemy=0
kaiten13.enemy=0
kaiten16.enemy=0
pang91.enemy=0
jikitamaname.enemy=0
eh.enemy=0
ename.enemy=0
eneh.enemy=0
enehx.enemy=0
enehy.enemy=0
eff.enemy=0
es_kill enemy
enemy++
if enemy>1540 : break
loop
*************************************
この配列変数の初期化は起動時の1回目のプレイでは読み込みしていなかったので
起動時の1回目の時だけリプレイがおかしくなっていたようです。
これでリプレイは上手く動いてくれる・・・はず^^;
でも、家の環境での話なので他の環境で上手く行くのかどうかはまだわかりませんが・・・
なにが原因だったかと言うと、やはり変数の初期化がおかしくて、具体的には配列変数の初期化が上手くいってなかったようです。
配列の初期化を↓のようにes_findを使ってやっていたのですが・・・
*************************************
enemy=0 ;検索開始番号
repeat
es_find enemy,0,enemy ;敵(8)スプライト検索
if enemy=-1 : break ;見つからなかったらループ終了
ef.enemy=0
et.enemy=0
espeed.enemy=0
reh.enemy=0
kaiten12.enemy=0
kaiten13.enemy=0
kaiten16.enemy=0
pang91.enemy=0
jikitamaname.enemy=0
eh.enemy=0
ename.enemy=0
eneh.enemy=0
enehx.enemy=0
enehy.enemy=0
eff.enemy=0
es_kill enemy
enemy++
loop
************************************
この方法だと完璧に全ての配列変数が初期化されてなかったようで
↓のような方法で全ての配列変数を0にするように変えると上手く動くようになりました。
*************************************
enemy=0 ;検索開始番号
repeat
ef.enemy=0
et.enemy=0
espeed.enemy=0
reh.enemy=0
kaiten12.enemy=0
kaiten13.enemy=0
kaiten16.enemy=0
pang91.enemy=0
jikitamaname.enemy=0
eh.enemy=0
ename.enemy=0
eneh.enemy=0
enehx.enemy=0
enehy.enemy=0
eff.enemy=0
es_kill enemy
enemy++
if enemy>1540 : break
loop
*************************************
この配列変数の初期化は起動時の1回目のプレイでは読み込みしていなかったので
起動時の1回目の時だけリプレイがおかしくなっていたようです。
これでリプレイは上手く動いてくれる・・・はず^^;
カレンダー
04 | 2025/05 | 06 |
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/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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事