おおまかな流れ
まず、ベースとなるスクロールの動きを作ります。
スクロール面は全部で4枚使えますが、この中で1つを選びます。
自機と同じ高さにある面を選ぶのがよいと思います。
この面の初期位置・初期速度を決め、ステージの最後までの流れをとりあえずは適当につけます。
このときその他の面は、見えない位置を初期値にしておくと邪魔にならなくていいでしょう。
次に決まった位置で出てくる敵を配置していきます。
配置スクロール面は基準とした面にします。
位置で出現タイミングが決まらない敵は、このときはまだ放置しておきます。
この時点でおおよそのステージの流れは出来ているので、ここから先は変数などの具体的な使用方法を考えていきます。
それが決まったら他の敵や他のスクロール面の動きをつけていきます。
必要ならイベントの呼び出しも作ります。
スクロール面は全部で4枚使えますが、この中で1つを選びます。
自機と同じ高さにある面を選ぶのがよいと思います。
この面の初期位置・初期速度を決め、ステージの最後までの流れをとりあえずは適当につけます。
このときその他の面は、見えない位置を初期値にしておくと邪魔にならなくていいでしょう。
次に決まった位置で出てくる敵を配置していきます。
配置スクロール面は基準とした面にします。
位置で出現タイミングが決まらない敵は、このときはまだ放置しておきます。
この時点でおおよそのステージの流れは出来ているので、ここから先は変数などの具体的な使用方法を考えていきます。
それが決まったら他の敵や他のスクロール面の動きをつけていきます。
必要ならイベントの呼び出しも作ります。
以上が流れとなります。
敵の配置
スクロール面に対する配置
スクロール面に対する敵の配置はそれほど難しくはないですが、配置ラインの設定には気をつけなくてはなりません。
これは指定したスクロール面がその位置まで来たら敵をセットするというラインで、その位置に敵がセットされるわけではありません。
配置ラインの設定ボックス上で右クリックをすると、前方配置と後方配置の標準ラインをセットすることが出来ます。
前方配置は、基準ラインの前方に敵をセットします。
実際には敵のセット位置の後方、つまり画面でいうと下側にラインがセットされます。
後方配置は逆に基準ラインの後方に敵をセットします。
普通使うのは前方配置です。
このとき配置ラインは敵セット位置の約2画面後方(もしくは前方)になります。
したがって画面に出てきるまでは若干のタイムラグがあります。
2画面離れている理由は、これくらい離しておかないと出現した瞬間に画面に入ってしまう可能性があるからです。
これは指定したスクロール面がその位置まで来たら敵をセットするというラインで、その位置に敵がセットされるわけではありません。
配置ラインの設定ボックス上で右クリックをすると、前方配置と後方配置の標準ラインをセットすることが出来ます。
前方配置は、基準ラインの前方に敵をセットします。
実際には敵のセット位置の後方、つまり画面でいうと下側にラインがセットされます。
後方配置は逆に基準ラインの後方に敵をセットします。
普通使うのは前方配置です。
このとき配置ラインは敵セット位置の約2画面後方(もしくは前方)になります。
したがって画面に出てきるまでは若干のタイムラグがあります。
2画面離れている理由は、これくらい離しておかないと出現した瞬間に画面に入ってしまう可能性があるからです。
変数による配置
こちらには配置ラインというものは存在しません。
そのかわり敵セット位置の意味合いが異なります。
敵がセットされるタイミングは条件の一致した瞬間で、セットされる位置はそのときの背景位置を基準にした相対位置です。
このときも配置後いきなり画面に入らないように注意が必要です。
そのかわり敵セット位置の意味合いが異なります。
敵がセットされるタイミングは条件の一致した瞬間で、セットされる位置はそのときの背景位置を基準にした相対位置です。
このときも配置後いきなり画面に入らないように注意が必要です。
スクロールの制御
スクロールを制御するときの数値の説明をします。
位置が0のときにマップ上の一番左下のブロックとその右隣のブロックの中央が画面の中心になるように表示されます。
以後1ブロック上に行くたびに480ずつ増えていきます(上方向が正の方向です)。
速度は50フレーム(1秒)で進むライン数です。
一応負の値も設定可能です。
速度の変化をつけるときは、変化にかかるフレーム数と最終的な速度を指定します。
そのフレーム数で速度は線形に補間されます(つまり一定の加速度で速度が変化します)。
角度は1024で360度です。
通常の方向のときが0です。
一応1024を越しても大丈夫です。
角度の変化をつけるときは、変化にかかるフレーム数と相対的な角度変化量を指定します。
これは回転の方向を制御するための仕様です。
角度変化は速度変化に比べるとやや複雑な変化をします。
指定フレーム数の4分の1の時間をかけて加速し、2分の1の時間は等速で回転し、最後の4分の1の時間で減速します。
位置が0のときにマップ上の一番左下のブロックとその右隣のブロックの中央が画面の中心になるように表示されます。
以後1ブロック上に行くたびに480ずつ増えていきます(上方向が正の方向です)。
速度は50フレーム(1秒)で進むライン数です。
一応負の値も設定可能です。
速度の変化をつけるときは、変化にかかるフレーム数と最終的な速度を指定します。
そのフレーム数で速度は線形に補間されます(つまり一定の加速度で速度が変化します)。
角度は1024で360度です。
通常の方向のときが0です。
一応1024を越しても大丈夫です。
角度の変化をつけるときは、変化にかかるフレーム数と相対的な角度変化量を指定します。
これは回転の方向を制御するための仕様です。
角度変化は速度変化に比べるとやや複雑な変化をします。
指定フレーム数の4分の1の時間をかけて加速し、2分の1の時間は等速で回転し、最後の4分の1の時間で減速します。
ループを作成するには位置変更を使います。
基本的には条件にスクロール位置を使い、特定の位置まできたら指定位置まで戻るようにしておきます。
ループ回数を指定したいようなときは変数の条件と組み合わせます。
うまくループ開始位置と終了位置を考えないとループした瞬間に画面が飛ぶ感じになってしまいます。
そのため、位置変更の指定においては位置をブロック境界に合わせるという指定が出来るようにしてあります。
注意点としては、位置が変化するのであってブロックのつながりが変化するわけではないという点です。
どういうことかというと、ループの終端まで来たとき、その先に見えているブロックはループの開始端の位置で見えるブロックとは違うということです。
音のループなどの場合はその先の音というのは聞こえないわけですが、画面の場合は見えてしまいますので注意してください。
基本的には条件にスクロール位置を使い、特定の位置まできたら指定位置まで戻るようにしておきます。
ループ回数を指定したいようなときは変数の条件と組み合わせます。
うまくループ開始位置と終了位置を考えないとループした瞬間に画面が飛ぶ感じになってしまいます。
そのため、位置変更の指定においては位置をブロック境界に合わせるという指定が出来るようにしてあります。
注意点としては、位置が変化するのであってブロックのつながりが変化するわけではないという点です。
どういうことかというと、ループの終端まで来たとき、その先に見えているブロックはループの開始端の位置で見えるブロックとは違うということです。
音のループなどの場合はその先の音というのは聞こえないわけですが、画面の場合は見えてしまいますので注意してください。
変数の制御
変数は初期値を与えることが出来ます。
ほとんどの変数の初期値は0でいいと思います。
変数の最後の2つ(30と31)はカウンタになります。
これはゲーム開始以降常に1ずつ増えていきます。
具体的な変数の使い方はチュートリアルに書きます。
ほとんどの変数の初期値は0でいいと思います。
変数の最後の2つ(30と31)はカウンタになります。
これはゲーム開始以降常に1ずつ増えていきます。
具体的な変数の使い方はチュートリアルに書きます。
イベント
イベントは上記の項目では実現できないタイプの処理を行うのに使います。
例えばWARNING表示であったり、面クリアだったりです。
当然のことながらイベントはプログラムを組む必要があるので、必要なイベントは事前に相談してください。
例えばWARNING表示であったり、面クリアだったりです。
当然のことながらイベントはプログラムを組む必要があるので、必要なイベントは事前に相談してください。
「条件」の成立について
もし2つ条件が設定可能な場合、その2つともが成立しなくては起動しません。
位置制御は条件が1つだけなので、スクロール位置が等しくて1つの条件が成立した場合に起動します。
位置制御は条件が1つだけなので、スクロール位置が等しくて1つの条件が成立した場合に起動します。
次に「条件」プルダウンメニューについて詳しく書きます。
より大きい
指定した変数(もしくはScrやGrp)の内容が閾値より大きい場合に成立します。
以上
指定した変数(もしくはScrやGrp)の内容が閾値以上(同じ場合を含みます)場合に成立します。
等しい
指定した変数(もしくはScrやGrp)の内容が閾値と同じ場合に成立します。
以下
指定した変数(もしくはScrやGrp)の内容が閾値以下(同じ場合を含みます)場合に成立します。
より小さい
指定した変数(もしくはScrやGrp)の内容が閾値より小さい場合に成立します。
常に成立
指定した変数がいかなる値を持っていても常に成立します。
これの使い道は、変数は2個指定できるが1つだけを使いたい場合に、もうひとつのほうを適当な変数にしておき条件を「常に成立」にします。
こうすれば2個目の変数は実質無視されるので1つ目の変数でだけ判断されるようになります。
これの使い道は、変数は2個指定できるが1つだけを使いたい場合に、もうひとつのほうを適当な変数にしておき条件を「常に成立」にします。
こうすれば2個目の変数は実質無視されるので1つ目の変数でだけ判断されるようになります。
常に不成立
これには意味がありません。
なぜなら変数の内容にかかわらず常に成立しないので絶対に起動されないからです。
使い道としては例えばテスト目的などで一時的に起動不可にしたいときに、リストから削除せずに起動不可にすることが出来ます。
なぜなら変数の内容にかかわらず常に成立しないので絶対に起動されないからです。
使い道としては例えばテスト目的などで一時的に起動不可にしたいときに、リストから削除せずに起動不可にすることが出来ます。
チュートリアル
やや具体的なゲームの制御について書きます。
背景を指定回数ループさせる
ループ回数に使う変数を用意します(ここでは0番の変数とします)。
変数0の初期値をループ回数にしておきます。
ループ開始位置から終了位置の間の適当な場所で変数0を1減らす変数制御を入れます。
スクロールの位置変更で、ループ終了位置まで来て変数0が0より大きいという条件を設定します。
このとき再配置は有効にしておきます。
変数0の初期値をループ回数にしておきます。
ループ開始位置から終了位置の間の適当な場所で変数0を1減らす変数制御を入れます。
スクロールの位置変更で、ループ終了位置まで来て変数0が0より大きいという条件を設定します。
このとき再配置は有効にしておきます。
特定の敵グループが全滅したら次の敵を出す
Grp0の敵が全滅したら敵をセットするという条件をつけます。
これには、トリガーにGrp0を指定し、条件を0に等しいとします。
これには、トリガーにGrp0を指定し、条件を0に等しいとします。
特定の敵グループが全滅後指定時間後にイベントを発生させる
上記と同様にGrp0が全滅後とすると、変数制御で変数30か31のトリガーをGrp0、条件を0に等しいとします。
設定する値は0にします。
イベントのトリガーを変数30とし、条件を指定時間(フレーム数)に等しいとします。
ただ、この条件の場合ゲーム開始しばらく後などに同じ条件が成立してしまう可能性があります。
したがってもうひとつ変数を使い今が必要なタイミングなのかを調べるほうがいいでしょう。
そのためには、同じトリガーと条件で変数0などを1などにセットしておきイベントのもうひとつのトリガーに変数0が1に等しいという条件をつけます。
設定する値は0にします。
イベントのトリガーを変数30とし、条件を指定時間(フレーム数)に等しいとします。
ただ、この条件の場合ゲーム開始しばらく後などに同じ条件が成立してしまう可能性があります。
したがってもうひとつ変数を使い今が必要なタイミングなのかを調べるほうがいいでしょう。
そのためには、同じトリガーと条件で変数0などを1などにセットしておきイベントのもうひとつのトリガーに変数0が1に等しいという条件をつけます。
作成したステージデータの確認方法
dataフォルダの下にstageというフォルダを作ります。
ここにマップとステージのマスターデータを入れます。
それぞれ、000.mpmと000.stmという名前で入れてください。
この状態でゲームを開始するとそのデータでゲームが始まります。
ただし、開始直後はデモ状態で、その間はステージのデータは有効ではありません(自機が操作できない時間がそれです)。
したがってステージ開始しばらくは何も起こらないようなデータにしておいてください。
ここにマップとステージのマスターデータを入れます。
それぞれ、000.mpmと000.stmという名前で入れてください。
この状態でゲームを開始するとそのデータでゲームが始まります。
ただし、開始直後はデモ状態で、その間はステージのデータは有効ではありません(自機が操作できない時間がそれです)。
したがってステージ開始しばらくは何も起こらないようなデータにしておいてください。