まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
戦艦用に小さい砲台を作成してみました↓

砲台画像はHamCorossam様のSTG素材を使用させて頂いています。
ちゃんと見え隠れするようにしてみようと思って、DOGAを駆使して
切った貼ったで作製したのですが、こんな小さな画像作るのに
砲台画像は書いてないというのに3時間くらい掛かりました・・・orz
ホント、自分の絵心の無さには泣けてきます。
これでも、学生の頃は美術は得意科目だったんですがねぇ・・・
それと、全然関係ないのですがyoutubeに、なんとSolid State Survivorの動画が
アップされてました。
以前、PlayLoud!!のkeigoさんがアップしてくれた動画があるのは知っていたのですが
何気に検索してみたら別の人がアップされたようです。
どういう意図でアップされたのは不明ですが、他の人のプレイを見ると
自分の想定した動き方とは違う動き方をしていて、興味深いです。
ちゅうか、この動画を見る限りでは、とても難しいゲームに見えますねぇ・・・
難易度設定はやっぱり必要かなぁ?と思ったりしました。
ところで、YMOで検索した人はこれ見たらなんて思うんでしょうね(汗)
調子にのって海外サイトを検索してみたら、なんとSolid State Survivorを
紹介してくれてるサイトがありました↓
the2bears.com(海外の弾幕型みたいなサイトです)
紹介して頂いているページ
Shoot The Core(海外のSTGまとめサイト)
紹介して頂いているページ(MUST HAVEの文字が^^)
私は英語が全然わからないので、詳しく何と書いてあるのかは不明なのですが
少なくとも私の作ったSTGが海を越えて、海外の人にもプレイされているのかと
思うと嬉しい限りですね^^
今後とも、気を引き締めて作製していこうと思った次第です。
砲台画像はHamCorossam様のSTG素材を使用させて頂いています。
ちゃんと見え隠れするようにしてみようと思って、DOGAを駆使して
切った貼ったで作製したのですが、こんな小さな画像作るのに
砲台画像は書いてないというのに3時間くらい掛かりました・・・orz
ホント、自分の絵心の無さには泣けてきます。
これでも、学生の頃は美術は得意科目だったんですがねぇ・・・
それと、全然関係ないのですがyoutubeに、なんとSolid State Survivorの動画が
アップされてました。
以前、PlayLoud!!のkeigoさんがアップしてくれた動画があるのは知っていたのですが
何気に検索してみたら別の人がアップされたようです。
どういう意図でアップされたのは不明ですが、他の人のプレイを見ると
自分の想定した動き方とは違う動き方をしていて、興味深いです。
ちゅうか、この動画を見る限りでは、とても難しいゲームに見えますねぇ・・・
難易度設定はやっぱり必要かなぁ?と思ったりしました。
ところで、YMOで検索した人はこれ見たらなんて思うんでしょうね(汗)
調子にのって海外サイトを検索してみたら、なんとSolid State Survivorを
紹介してくれてるサイトがありました↓
the2bears.com(海外の弾幕型みたいなサイトです)
紹介して頂いているページ
Shoot The Core(海外のSTGまとめサイト)
紹介して頂いているページ(MUST HAVEの文字が^^)
私は英語が全然わからないので、詳しく何と書いてあるのかは不明なのですが
少なくとも私の作ったSTGが海を越えて、海外の人にもプレイされているのかと
思うと嬉しい限りですね^^
今後とも、気を引き締めて作製していこうと思った次第です。
PR
ステージ3後半の戦艦を作成して行こうと思って、まず最初に登場させようと
思っていた回転砲台を作製してみました。

しかし、この回転砲台を実装するまでの道のりが長かった・・・
この、回転する敵で敵弾の発射位置が中心ではない場合の計算がややこしくて
しかも今回の場合、敵弾を撃っている時は回転しないようにしたので更に
ややこしくなってしまい、当初はゲーム用のスクリプトを使って作製していたのですが
訳がわからなくなってしまったので、いつものように簡単なスクリプトを作製して
考えてみました↓
回転砲台スクリプト
このスクリプトを動かすとこんな感じ↓
(たまに、回転が遅くてフラッシュに間に合ってませんが御愛嬌って事で^^;)

敵の動きとしては
1.自機の方向に向かって回転
2.レーザーを打つ前の前兆を表示(マズルフラッシュって言うんですかね?)
3.回転を止めてレーザーを発射
4.1に戻る
と言う感じにしたかったんです。
で、この場合に計算しなければならないのは、まずは本体が自機に向かって
回転する為の角度計算。
これは、es_ang ex+160,ey+160,px+18,py+18みたいな感じで出来ます。
次にマズルフラッシュを表示する為に、砲台の先端の座標を計算します。
これは、以前書いた回転する敵の弾の発射位置と考え方は同じで
先端座標に円を書くつもりで、座標の計算をします。
先端の座標がわかればレーザーの表示も、その座標から発射させれば良いので
問題ありません。
ですが、レーザーを撃っている時は敵は回転しません。
という事は、撃ち終わった後は自機の方向を向いていないという事になります。
ここで、メチャクチャ悩みました。
es_ang命令で敵の方向を変えると、パッと方向が変わってしまうので変です。
出来れば自機の方向までジワーっと方向転換して、自機の方を向いたら
その後は自機を追いかけて欲しいです。
どうするか考えました。
で、思いついたのがレーザーを撃っている時の角度を覚えておいて
レーザーを撃ち終わった後の敵と自機との角度を計算し
レーザーを撃っている時と、撃ち終わった後の角度を比べて
角度が小さければ砲台回転角度をプラス、角度が大きければ砲台回転角度をマイナスし
自機の方に向いたら、その後は自機を追いかける
と言う風にしてみました。
これで上手く行った!と思ったのもつかの間、まだ問題がありました。
es_angで角度を計算すると、一周を360度と設定している場合
下の方向が0(360)、右の方向が90、上の方向が180、左の方向が270になります。
この下の方向が0(360)ってのが厄介で、例えばレーザーを撃っている時の角度が320度で
レーザーを撃ち終わった時の角度が20度だったとすると
普通は320からマイナスしていくのですが、マイナスだと実は反対方向に回って
しまいます。
実際は320にプラスして、さらに360を超えた場合は0に戻してからプラスして
20にしないといけないんです。
色々と試した結果、レーザーを撃っている時の角度と撃ち終わった後の角度の差が
大体145以上と以下で、プラスとマイナスを逆転させないといけない事がわかりました。
う~ん、上手く文章で書くのって難しいですね・・・
で、それをスクリプトにしたのが、上記の回転砲台スクリプトです。
これを踏まえて、ゲーム用のスクリプトに移植したところ、上手く動くようになりました^^

ちゃんと、発射前の溜めも行います。
もっと簡単な実装方法もあるんではないかと思うのですが、とりあえず
今の所上手く動いているようなので、これで良しとしておきます^^;
思っていた回転砲台を作製してみました。
しかし、この回転砲台を実装するまでの道のりが長かった・・・
この、回転する敵で敵弾の発射位置が中心ではない場合の計算がややこしくて
しかも今回の場合、敵弾を撃っている時は回転しないようにしたので更に
ややこしくなってしまい、当初はゲーム用のスクリプトを使って作製していたのですが
訳がわからなくなってしまったので、いつものように簡単なスクリプトを作製して
考えてみました↓
回転砲台スクリプト
このスクリプトを動かすとこんな感じ↓
(たまに、回転が遅くてフラッシュに間に合ってませんが御愛嬌って事で^^;)
敵の動きとしては
1.自機の方向に向かって回転
2.レーザーを打つ前の前兆を表示(マズルフラッシュって言うんですかね?)
3.回転を止めてレーザーを発射
4.1に戻る
と言う感じにしたかったんです。
で、この場合に計算しなければならないのは、まずは本体が自機に向かって
回転する為の角度計算。
これは、es_ang ex+160,ey+160,px+18,py+18みたいな感じで出来ます。
次にマズルフラッシュを表示する為に、砲台の先端の座標を計算します。
これは、以前書いた回転する敵の弾の発射位置と考え方は同じで
先端座標に円を書くつもりで、座標の計算をします。
先端の座標がわかればレーザーの表示も、その座標から発射させれば良いので
問題ありません。
ですが、レーザーを撃っている時は敵は回転しません。
という事は、撃ち終わった後は自機の方向を向いていないという事になります。
ここで、メチャクチャ悩みました。
es_ang命令で敵の方向を変えると、パッと方向が変わってしまうので変です。
出来れば自機の方向までジワーっと方向転換して、自機の方を向いたら
その後は自機を追いかけて欲しいです。
どうするか考えました。
で、思いついたのがレーザーを撃っている時の角度を覚えておいて
レーザーを撃ち終わった後の敵と自機との角度を計算し
レーザーを撃っている時と、撃ち終わった後の角度を比べて
角度が小さければ砲台回転角度をプラス、角度が大きければ砲台回転角度をマイナスし
自機の方に向いたら、その後は自機を追いかける
と言う風にしてみました。
これで上手く行った!と思ったのもつかの間、まだ問題がありました。
es_angで角度を計算すると、一周を360度と設定している場合
下の方向が0(360)、右の方向が90、上の方向が180、左の方向が270になります。
この下の方向が0(360)ってのが厄介で、例えばレーザーを撃っている時の角度が320度で
レーザーを撃ち終わった時の角度が20度だったとすると
普通は320からマイナスしていくのですが、マイナスだと実は反対方向に回って
しまいます。
実際は320にプラスして、さらに360を超えた場合は0に戻してからプラスして
20にしないといけないんです。
色々と試した結果、レーザーを撃っている時の角度と撃ち終わった後の角度の差が
大体145以上と以下で、プラスとマイナスを逆転させないといけない事がわかりました。
う~ん、上手く文章で書くのって難しいですね・・・
で、それをスクリプトにしたのが、上記の回転砲台スクリプトです。
これを踏まえて、ゲーム用のスクリプトに移植したところ、上手く動くようになりました^^
ちゃんと、発射前の溜めも行います。
もっと簡単な実装方法もあるんではないかと思うのですが、とりあえず
今の所上手く動いているようなので、これで良しとしておきます^^;
ステージ3後半は戦艦戦にしようと思っているのですが、その前に背景を作製しようと
思って色々と考えてみました。
イメージとしてはアマゾン上空でジャングルの上を飛んでいる感じ。
アマゾンと言う事は、森と川と海が交互にスクロールすれば良いかなぁ?と思って
まず、↓こんな画像を作成してみました。

背景画像にはHamCorossam様の背景素材を使用させて頂いています。
で、これをどう繋げるかでかなり悩みました。
繋ぎ方を一定にして、ループさせる方法が簡単で良いのですが
それだと、どうも単調でイマイチです。
かと言って繋ぎ方をタイムテーブルのように延々と記述するのも大変です。
理想的なのはランダムで川が出たり、海になったり、森になったりするのが
良いなぁ~と思って簡単なスクリプトを作って考えてみました↓
森~川~海のランダムスクリプト
このスクリプトを実行するとこんな感じ↓

考え方としては、海を表示している時と森を表示している時にわけていて
海を表示している時に考えられる動作としては
上の画像の
1~1~1で海を表示させる
1~3~4~1で海から森へ移行して海に戻る
1~3~2で海から森へ移行する
のどれかという事になります。
また、森を表示している時に考えられる動作としては
2~2~2で森を表示させる
2~4~3~2で森から海(川)へ移行して森に戻る
2~4~1で森から海へ移行する
のどれかと言う事になります。
これを踏まえて、ランダムで森を表示させたり海を表示させたりするように
してみました。
この方法だとランダムでマップを選ぶので、同じマップになる事もありませんし
選ぶ乱数によっては、海が続いたり、森が続いたりする事もあり
なかなか良い感じではないかと自分では思っています^^
ただ、今思えばこのスクリプトを考える時間よりもステージ3終了までのマップデータを
タイムテーブルのように記述した方が、早く出来た気がします^^;
思って色々と考えてみました。
イメージとしてはアマゾン上空でジャングルの上を飛んでいる感じ。
アマゾンと言う事は、森と川と海が交互にスクロールすれば良いかなぁ?と思って
まず、↓こんな画像を作成してみました。
背景画像にはHamCorossam様の背景素材を使用させて頂いています。
で、これをどう繋げるかでかなり悩みました。
繋ぎ方を一定にして、ループさせる方法が簡単で良いのですが
それだと、どうも単調でイマイチです。
かと言って繋ぎ方をタイムテーブルのように延々と記述するのも大変です。
理想的なのはランダムで川が出たり、海になったり、森になったりするのが
良いなぁ~と思って簡単なスクリプトを作って考えてみました↓
森~川~海のランダムスクリプト
このスクリプトを実行するとこんな感じ↓
考え方としては、海を表示している時と森を表示している時にわけていて
海を表示している時に考えられる動作としては
上の画像の
1~1~1で海を表示させる
1~3~4~1で海から森へ移行して海に戻る
1~3~2で海から森へ移行する
のどれかという事になります。
また、森を表示している時に考えられる動作としては
2~2~2で森を表示させる
2~4~3~2で森から海(川)へ移行して森に戻る
2~4~1で森から海へ移行する
のどれかと言う事になります。
これを踏まえて、ランダムで森を表示させたり海を表示させたりするように
してみました。
この方法だとランダムでマップを選ぶので、同じマップになる事もありませんし
選ぶ乱数によっては、海が続いたり、森が続いたりする事もあり
なかなか良い感じではないかと自分では思っています^^
ただ、今思えばこのスクリプトを考える時間よりもステージ3終了までのマップデータを
タイムテーブルのように記述した方が、早く出来た気がします^^;
ステージ3の中ボスが完成しました^^
この中ボスはハンマーを持っているので、ハンマーを中心に攻撃を考えました。
動きとしては、ハンマー回転→ハンマー伸縮→ハンマー回転・・・を繰り返し
ハンマー回転時の攻撃を伸縮回数によって変更するようにしました。



基本的には、ハンマーから弾が出るようになっています。
ただ、ハンマー自体がとても見にくくなってしまったので、弾を半透明で
表示するようにしてみましたが、それでも見にくいんですよね・・・
どうしようか考え中です。
で、今回も弱点を作って早回し出来るようにしています^^
あと、全然関係ないのですが、今まではアイテムの回収方法を自機がアイテムに
100ドット以内に近づくと、自動回収するようにしていたのですが
どうも取りこぼしが多いような気がしたので、ショットを撃っている時は自動回収で
レーザーを撃っている時は、そのまま下に落ちていくように変更してみました。
この中ボスはハンマーを持っているので、ハンマーを中心に攻撃を考えました。
動きとしては、ハンマー回転→ハンマー伸縮→ハンマー回転・・・を繰り返し
ハンマー回転時の攻撃を伸縮回数によって変更するようにしました。
基本的には、ハンマーから弾が出るようになっています。
ただ、ハンマー自体がとても見にくくなってしまったので、弾を半透明で
表示するようにしてみましたが、それでも見にくいんですよね・・・
どうしようか考え中です。
で、今回も弱点を作って早回し出来るようにしています^^
あと、全然関係ないのですが、今まではアイテムの回収方法を自機がアイテムに
100ドット以内に近づくと、自動回収するようにしていたのですが
どうも取りこぼしが多いような気がしたので、ショットを撃っている時は自動回収で
レーザーを撃っている時は、そのまま下に落ちていくように変更してみました。
カレンダー
03 | 2025/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/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が特に好きで、並木学氏は最高!
ブログ内検索
最古記事