[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
昨日作ったホーミングレーザースクリプトをHSPDXFIXでも使えるように
スクリプトを考えていたのですが、なかなか上手くいきません・・・
ホーミングの部分は比較的簡単に出来たのですが、レーザーの尾っぽの部分が
上手く行かなくて、全然明後日の方向に行ってしまったり、回転表示が
バラバラだったりして、悩みまくりです(汗)
で、EcoQさんのいや☆ぼーん Prototypeのソースを見ながらアレやコレやと
考えてなんとか満足出来るレベルまで作る事が出来ました^^
と言っても、殆どいや☆ぼーん Prototypeのソースを写したような感じなので
今回はソースはアップしてません^^;
このEcoQさんのソースを拝見していると、何をどうやっているのかってのは何となく理解は
出来るのですが、1から作れと言われると私には思いもつきません。
ホント、なんでこんなスクリプトを思いつくのか不思議です。
で、最初に私が作っていたスクリプトが上手く動かなかったのは
レーザーの番号の概念がなかったからかなぁ~と思ったりしています。
上手くいった方では、レーザー毎にの番号を振り当て、その番号によって
配列変数を使用して尾を表示するって感じで上手く動きました。
そして、また一つ知らない便利な命令が使用されていました。
on p1 goto/gosub ラベル0、ラベル1・・・
と言う命令なのですが、この命令を使えばp1の値が0ならラベル0へ
1ならラベル1へ、2ならラベル2へ、と行ったように分岐する事ができ
いちいちgosubで分ける必要が無く、便利です。
他の人が書いたソースを見ると新しい発見があるので、とても勉強になりますね。
と言っても、そもそも私の勉強不足が原因なんですが^^;
とりあえず、これを元にステージ3ボスのホーミングレーザーとして組み込んでみます。
ホーミングレーザーを作ろうと思って試行錯誤していたのですが全然出来ず
困っていたら、いや☆ぼーん ラボのEcoQさんがホーミングレーザーのスクリプトを
ソース付でアップして下さり、ここぞとばかりにダウンロードしてソースを見させて
もらってました。
そうこうしている内に、今度はコメント欄でellerさん作のホーミングレーザースクリプトを
紹介して下さり、これまたここぞとばかりに眺めていたんですが、やはり三角関数で
計算して表示しないとダメッぽいな~という事がわかって来ました。
で、いつものように簡単なスクリプトを作って(真似して)ホーミングレーザースクリプトを
作製してみました↓
ホーミングレーザースクリプト
このスクリプトを動かすとこんな感じ↓
■が敵で、三角が自機。●がレーザーです。
ホーミングレーザーを作る上での考え方は、弾の動き(回転角度)を制限するって事です。
例えば、360度で考えるとして
敵弾の移動方向が10度
敵弾から見た自機の位置が20度だったとすると
敵弾は次のフレームの時は20度の方向に向かおうとするわけです。
でも、ここで敵弾の最大回転角度を5度に設定していたとすると、敵弾は15度の
方向にしか進めません。
こういう計算をスクリプトをで行うのですが、こんなのどうすんだ?と思っていたら
limitfと言う命令がある事を知りました。
このlimitfという命令ですが、ヘルプを見ると
******************************************************************************
p1に指定した値を,p2~p3の範囲内に収まる実数に変換したものを返します。
p1の値がp2よりも小さい場合は、p2の値が返され、p1の値がp3よりも大きい場
合にはp3の値が返されます。
これにより、limitf関数が返す値は、必ずp2~p3の範囲内となります。
******************************************************************************
まさにこの計算の為にあるんじゃないかと思うような命令です^^
これによってホーミングレーザーはなんとか出来ました。(写したとも言いますが^^;)
後は、尾っぽの部分です。
これは以前書いた自機のオプション(グラディウス風)の時と同じで
配列にある程度の座標を記憶させておき、一定間隔で尾の部分を表示させて
やればOKでした。
とりあえず標準命令では出来たので、これを元にHSPDXFIXで作ろうと思っているのですが
上手くいく・・・・・・と思いたい^^;
と思って方法を色々と考えたのですが、まったく上手く出来ませんでした(汗)
ただ単純に自機を追いかけるだけなら、es_adirなりes_aimなりで自機座標を
指定してやれば簡単なのですが、この方法だとあまりにも自機を正確に
追っかけてしまうので、ゲームとしては面白くありません。
ある程度、不正確の方が避けがいがあるってもんです。
ですので、考え方としては、レーザーの移動方向に制限をつけてやれば良いのだと
思うのですが、この制限のつけ方が良くわからなくて悩み中なんです。
で、ふとHSPを勉強しはじめた頃にHSPスレでホーミングレーザーの話をしていた
事を思い出して調べてみたのですが、既に過去ログ扱いになっており見れず・・・
いつもなら諦めるのですが、今回はどうしても見たかったのでモリタポを購入して
過去ログを見てみました。
で探してみるとHSP - Hot Soup Processor [11] (12)って所にありました。
あったんですが、実はホーミングレーザーの話ではなくて、加算合成による
レーザーの表示方法の話で、ホーミングレーザーの話ではなくてちょっとがっかり・・・
でも、このサンプルにHSPDXFIXが使われており、色々と興味深い事が書いてありました。
以下スレより抜粋
*********************************************************
ブレンドファクターについて↓
ttp://www.platz.or.jp/~moal/tblend.html
*********************************************************
*********************************************************
サンプルは試せてないから良く分からないけど
ALPHA_ADD=es_bfcalc(ESB_ONE,ESB_INVSRCALPHA) ;α値で不透明度(下色の影響度)+加算合成(α値255時と同じ)
ESB_ADDの代わりに、これ試してみ
他にも組み合わせはあるけどな・・・
*********************************************************
*********************************************************
こんなのもある(276ので試してるだけだと分かり難いやつ)
INVSRCCOLOR_ADD=es_bfcalc(ESB_SRCALPHA,ESB_INVSRCCOLOR) ;1ドットの各色要素に対して (上色*α値+下色*(255-上色))/255 あってるかな・・・
分かりやすく言うと、合成する色を割り引いてから加算合成って感じ
α値は、減算処理後に加算合成される色に対して
ライトは、減算処理と加算合成される色両方に関係(暗いほど下が透ける)
元絵に近い感じに合成されるからレーザーとかで使うなら
加算合成で使う絵より明るくした方がいいかな・・・
あとは、グレイスケールで点のα値を用意して上のブレンドファクタでα値0か
α値の影響を受けない es_bfcalc(ESB_ZERO,ESB_INVSRCCOLOR)で (両方とも減算合成とは違うから完璧にはいかないと思うけど)
先に描画して、その上に加算合成でレーザーを重ねる
INVSRCCOLOR_ADDの方だとα値で明るさを残せるから合成後のレーザーの明るさを変えられる
*********************************************************
ブレンドファクターってesb_~以外にも色々と指定出来るんですね。
で、このブレンドファクターやらレーザーの色やらアルファ値などをレーザーを表示しながら
変更出来るソフトをアップされておられる方がおり、とても良い出来なので紹介↓
ttp://gamdev3.hp.infoseek.co.jp/cgi-bin/up/No_0030.zip
マウスの左ボタンでレーザーを発射し、キーボードで様々な設定を変更できます。
レーザーの動きも、まさにこんな動きをさせたかった!と言う感じでグリグリ動き
とても爽快です^^一体どうやって動かしてるんでしょうねぇ・・・
で、このゲームどこかで見たなぁ~と思ったら、いや☆ぼーん Pの作者さんでした。
このいや☆ぼーん Pですが、ホーミングレーザーが爽快で操作感も良く
昔セガマスターシステムであったSDIを思い出す操作感で、とても面白くてお勧めです。
動作も非常に軽くて、凄いなぁと感心するばかり。
とりあえず、このレーザーを目標にホーミングレーザースクリプトを考え中ですが
ステージ3のボスに実装されなかった時は、そっとしておいてやって下さい^^;
ステージ3のボスを作製しています。
今回はファンネルを登場させて攻撃をさせようと思って
まずファンネル画像を作ってみました↓
このファンネルを5つ登場させて、ファンネルを軸にして弾幕を考えていっているのですが
このファンネルの動きが上手く出来なくて相当苦労しています(汗)
このファンネルは5つ別々の動きをするので、5つ分のスクリプトを書かなければならず
非常に大変なんですよね・・・
もっと上手くまとめる方法もあるんだとは思うのですが、思い浮びません^^;
この攻撃ではファンネルを楕円に動かしているのですが、この「楕円」の動き
をさせる方法がわからずに相当悩みました^^;
円回転するだけなら
move++
es_adir 400,move,100
みたいに書けば円を描いて動いてくれるのですが、楕円だとそうはいきません。
最初はmove++の部分を足したり引いたり、足す数字を変化させてみたりしたのですが
どうも上手くいきません。
で、基本に戻って考えてみました。
普通は円運動をさせようと思ったら、三角関数を使用して座標計算して表示させるはず。
es_adirを使用して楽しようとしてるのが悪いんじゃないかと思い、まず三角関数を使用して
円運動させるスクリプトを作ってみました。
***********************************************
funnelr0=funnelr0-1;ファンネルの移動速度
a0=r*funnelr0;ファンネルの移動距離
funnelx=funnelk*cos(a0)+ex+488;中心座標x
funnely=funnelk*sin(a0)+ey+120;中心座標y
es_pos 400,funnelx,funnely;ファンネル表示
************************************************
こんな感じで表示させてみたのですが、ここでふと閃きました。
es_pos 400,funnelx,funnelyのfunnelyの部分をfunnely/2とかにすれば
x軸方向に大きく動く楕円を作れるんです^^
逆にfunnelxの方をfunnelx/2とかにすればy軸方向に大きく動く楕円が出来ます。
で、割る率を変えてやれば楕円の大きさも自由に変えれる事がわかりました^^
いや~、しかしここに辿り着くまでに夏休みの半分を消費してしまいました(汗)
この攻撃は羽に囲まれつつ、自機狙い弾を撃ってきます。
弾を撃っては移動し、また弾を撃っては移動してを繰り返します。
イメージとしては、ガンダムに出てくるエルメスのビットみたいな感じ。
この攻撃の時はファンネルは画面真ん中くらいより下には移動して欲しくなかったので
funnelx=rnd(416):funnely=rnd(200)
みたいな感じでy軸を200ドット以上には行かせないようにして
es_aim 400,funnelx,funnely,300
みたいにして目的の座標まで動かすようにしてみました。
とりあえず、第一形態はこれでOKとして、第二形態を作って行こうと思っていますが
このファンネルの動きを作るのが予想外に時間がかかってしまい難航中です^^;
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 |
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!