まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
以前、回転する敵にレーザーを撃たせようとして試行錯誤し結局出来なかった事がありまして、それを何とかしてみました。
問題点は弾の発射する位置です。例えば敵の位置をex,eyとしたら弾の発射位置はex+16,ey+16とかにしますよね。
この方法だと敵の中心から弾を撃つ場合は良いのですが、発射位置をずらすと困った事になります。
敵は回転するのに、弾の発射位置は回転しないので、発射させたい場所と実際に発射される場所がずれてしまうんです。
つまり、発射位置も回転させなければならないという事になります。
で色々と方法を考えてみました。
考え方としては、敵の中心から円を描きます。
この画像の白い円の部分に、発射場所を敵の回転画像に合わせて移動出来れば上手くいくはず・・・と思って作りました。
スクリプトはコチラ↓
*************************************
;弾発射
if (et.enemy>110)&(et.enemy<120){
es_exnew tama,1,249
if tama=-1 : return
if et.enemy=111 {
es_ang ex+40,ey+40,px+18,py+18 : pang2=stat;弾の発射方向
bork2=42.;発射位置(敵中心からの距離)
;■左レーザー発射位置計算
boer2=-pang2+130;発射位置(左側)
a=r*boer2;角度
boex2=bork2*cos(a)+ex+40;発射位置の円の計算x軸
boey2=bork2*sin(a)+ey+40;発射位置の円の計算y軸
;■右レーザー発射位置計算
boer3=-pang2+50;発射位置(右側)
a=r*boer3;角度
boex3=bork2*cos(a)+ex+40;発射位置の円の計算x軸
boey3=bork2*sin(a)+ey+40;発射位置の円の計算y軸
}
;●左レーザー表示
es_set tama,boex2,boey2,138,1 ;敵弾スプライト設置
es_type tama,32 ;敵弾type値(32)
es_adir tama,pang2,800 ;移動方向
es_effect tama,16,16,0,0,pang2,ESB_ADD,256
eh.tama=pang2
ename.tama=1
;●右レーザー表示
es_exnew tama,1,249
if tama=-1 : return
es_set tama,boex3,boey3,138,1 ;敵弾スプライト設置
es_type tama,32 ;敵弾type値(32)
es_adir tama,pang2,800 ;移動方向
es_effect tama,16,16,0,0,pang2,ESB_ADD,256
eh.tama=pang2
ename.tama=1
}
*************************************
まず敵が発生した第1フレーム目に弾の発射方向と弾の発射位置を計算します。
敵を中心とした円を計算し、その円の任意の場所(この場合boer2=-pang2+130の130)
を常に発射位置にするようにして発射させています。
実行させるとこんな感じ
この角度でも
この角度でも、弾の発射位置はちゃんと移動してくれました^^
それから、他のHSP製ゲームをやっていると良く弾のエフェクトがぼやけてる感じになっているのがあって、どうするんやろ?
と思って色々試してみたら出来ました^^
es_effect tama,16,16,0,0,pang2,ESB_ADD,256と言う部分でエフェクトを指定しているのですが
このESB_ADDと言う指定だけで、出来てしまいました。ホント凄いですhspdxfix。
ESB_ADDの説明を見てみると転送先に転送元画像の輝度を加算する半透明です。と書かれていますが
一体、どういう計算でこんなエフェクトになるのかは、私には全くわかりませんでした(汗)
問題点は弾の発射する位置です。例えば敵の位置をex,eyとしたら弾の発射位置はex+16,ey+16とかにしますよね。
この方法だと敵の中心から弾を撃つ場合は良いのですが、発射位置をずらすと困った事になります。
敵は回転するのに、弾の発射位置は回転しないので、発射させたい場所と実際に発射される場所がずれてしまうんです。
つまり、発射位置も回転させなければならないという事になります。
で色々と方法を考えてみました。
考え方としては、敵の中心から円を描きます。
この画像の白い円の部分に、発射場所を敵の回転画像に合わせて移動出来れば上手くいくはず・・・と思って作りました。
スクリプトはコチラ↓
*************************************
;弾発射
if (et.enemy>110)&(et.enemy<120){
es_exnew tama,1,249
if tama=-1 : return
if et.enemy=111 {
es_ang ex+40,ey+40,px+18,py+18 : pang2=stat;弾の発射方向
bork2=42.;発射位置(敵中心からの距離)
;■左レーザー発射位置計算
boer2=-pang2+130;発射位置(左側)
a=r*boer2;角度
boex2=bork2*cos(a)+ex+40;発射位置の円の計算x軸
boey2=bork2*sin(a)+ey+40;発射位置の円の計算y軸
;■右レーザー発射位置計算
boer3=-pang2+50;発射位置(右側)
a=r*boer3;角度
boex3=bork2*cos(a)+ex+40;発射位置の円の計算x軸
boey3=bork2*sin(a)+ey+40;発射位置の円の計算y軸
}
;●左レーザー表示
es_set tama,boex2,boey2,138,1 ;敵弾スプライト設置
es_type tama,32 ;敵弾type値(32)
es_adir tama,pang2,800 ;移動方向
es_effect tama,16,16,0,0,pang2,ESB_ADD,256
eh.tama=pang2
ename.tama=1
;●右レーザー表示
es_exnew tama,1,249
if tama=-1 : return
es_set tama,boex3,boey3,138,1 ;敵弾スプライト設置
es_type tama,32 ;敵弾type値(32)
es_adir tama,pang2,800 ;移動方向
es_effect tama,16,16,0,0,pang2,ESB_ADD,256
eh.tama=pang2
ename.tama=1
}
*************************************
まず敵が発生した第1フレーム目に弾の発射方向と弾の発射位置を計算します。
敵を中心とした円を計算し、その円の任意の場所(この場合boer2=-pang2+130の130)
を常に発射位置にするようにして発射させています。
実行させるとこんな感じ
この角度でも
この角度でも、弾の発射位置はちゃんと移動してくれました^^
それから、他のHSP製ゲームをやっていると良く弾のエフェクトがぼやけてる感じになっているのがあって、どうするんやろ?
と思って色々試してみたら出来ました^^
es_effect tama,16,16,0,0,pang2,ESB_ADD,256と言う部分でエフェクトを指定しているのですが
このESB_ADDと言う指定だけで、出来てしまいました。ホント凄いですhspdxfix。
ESB_ADDの説明を見てみると転送先に転送元画像の輝度を加算する半透明です。と書かれていますが
一体、どういう計算でこんなエフェクトになるのかは、私には全くわかりませんでした(汗)
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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事