(Flash8で作成)
何で違う事やってんの!?って感じですが大人の事情です。
動作確認はこちらをクリック
※自機は最初からステージに配置し、
myshipというインスタンス名にしています。
オプションも特にインスタンス名は付けていませんが、
3つ程最初からステージに配置しています。
これには配列を使います。
自機の過去の座標を、配列に記憶させておき、
自機の動きをトレースさせます。
配列に関しての説明は今回ありませんので、
配列の基礎等は他のサイトを参考にして下さいm(__)m
まずは、X座標用とY座標用の配列を作っておきます。
今回は判り易いようにroot上に作って、パスも絶対パスを使ってます。
_root.optionx = new Array(20);
_root.optiony = new Array(20);
要素数はとりあえず20にしておきました。
20フレーム分の座標を記憶させておけます。
次に、自機の座標を配列に入れていく処理です。
絶対パスにしているので何処に書いても良いですが、
毎フレーム実行されるようにして下さい。
MC内に書くのであればonClipEvent (enterFrame) { }内に記述ですね。
_root.optionx.unshift(_root.myship._x);
_root.optiony.unshift(_root.myship._y);
_root.optionx.pop();
_root.optiony.pop();
unshift()は配列の先頭にカッコ内の値(引数)を挿入するメソッドです。
_root.myship._xは自機の座標なので、
現在の自機座標を配列の先頭であるoptionx[0]へ入れている事になります。
この際に元々入っていた値は、後ろへ全体的にズレます。
しかし、ズレた影響で配列の要素が1個増えてしまいます。
このままでは毎フレームごとに増えて大変なことになるので
optionx.pop();を使って一番後ろの箱を消します。
pop()は配列の最後の要素を取り除くメソッドです。
ということで、毎フレームごとに自機の座標を取得して
配列の先頭に挿入していく事になるので
配列の前の方は自機の最近の座標、後ろの方は自機の古い座標が収納されている事になります。
次に1番目のオプションへ以下のように記述します
onClipEvent (enterFrame) {
this._x =_root.optionx[4] ;
this._y =_root.optiony[4] ;
}
2番目のオプションへ以下のように記述します
onClipEvent (enterFrame) {
this._x =_root.optionx[8] ;
this._y =_root.optiony[8] ;
}
1番目のオプションは4フレーム前の自機座標、
2番目のオプションは8フレーム前の自機座標を自分の座標にしています。
これでオプションの動きが完成です。
ですが、グラディウスのオプションは自機が止まっている間は動きませんね。
上記の処理だと自機が止まってもオプションは止まらず、自機に重なってきます。
これを防ぐ為に条件式を付けます。
if (_root.optionx[0] != _root.myship._x || _root.optiony[0] != _root.myship._y) {
_root.optionx.unshift(_root.myship._x);
_root.optiony.unshift(_root.myship._y);
_root.optionx.pop();
_root.optiony.pop();
}
配列に格納した最新の座標optionx[0]と現在の自機の座標を比べて、
違った場合(自機が動いていた場合)のみ処理を実行するようにします。
これで、自機が止まるとオプションも止まります。
今回はサンプルflaファイル作りました(Flash8で作成)
こちらをクリック
※配列への座標挿入処理は自機に記載しています。
素人なので変な処理をしている可能性もあります。
ご了承下さい。