はじめに(雑談)
Jerrydog ですが、ちょっと思い立って最近自分で Final Take Off を打ち込んでみました。記憶で作ったのでいくらか間違ってるかも...というか曲中通してドラムはほぼ覚えてないのでだいぶ適当。
割と原曲に忠実に、でもメロディはピアノにして、ソロは昔 CD で聞いてたのを思い出しながら記憶をたどってみたソロをピアノで奏でてます(さて、ソロのメロディラインはあってるのかな?<独り言)。
"This game is a homage to After Burner from SEGA." ですよ。
※ Final Take Off は上記には入ってません(ご注意)
自作曲ではないため公にするのは許諾とか権利とか、そういった関係であまりよろしくないので、自分一人だけの遊びですが。
セガに問い合わせてみようかと思ったのですが、問い合わせ窓口が分かりませんでした1。。。 セガの関係者で「いいですよ」っていうコメントがいただけるようなら Scratch 上でも使えるようにしてみたいなぁ、と。Final Take Off かっこいいなあ。
んで、ローカルでは 1 面の最初の BGM をそれにしてみたりしたんですが、いやぁ、空母上でのデレレレレレレーからの Get Ready? がカッコ良すぎてシビれました。
ここね。
Scratch Tips(画面範囲外への描画)
さて、本題。正直 Scratch 動作のハック的な要素でお勧めしづらいのだが、これなしには生きられないほど多用してしまっているので残します。これ、ちゃんとした仕様で実装されませんかね。というのも、画面の端っこでスプライトがスタックしてしまうのは、かなり動作が不自然なので、自然な動作をさせようとするとどうしても必要になるのです。
画面範囲外への描画
概要
Scratch では、画面サイズを超えた範囲にスプライトを移動させたり、ペンで描画したりすると位置が勝手に補正されて思った所に描画されません。これを救う手段です。ただし、最初にも言った通り多少ハックの要素が強いため、将来のアップデートで同じように正しく動くかは自己責任になります。
サンプル
実際の所、これまで作ったすべての作品で多用しています。
小さなネコは大きなネコのサイズ(画面サイズも含む)縮小版。大きなネコが端っこでスタックすると、小さなネコは黒い枠線のところでスタックします。モードを変えるとスタックしないようになります。
方法
Step 1
大きさ 0 x 0 のコスチュームを作ります。何もしないと 2 x 2 になってるので、一度四角形でも描いて削除すると 0 x 0 になります。名前は Empty とでもしておきましょう。
Step 2
ブロック定義を使います。「画面を再描画せずに実行する」にチェックを付けて ブロック定義を作ります。名前は _Infinate Move とてもしておきましょう。
Step 3
先ほどのブロック定義の中で、一旦コスチュームを Empty に変更し、大きさを 1 / 0
にします。これは Infinity(無限大)を意味します。Scratch では、実は大きさは元のサイズによって制限がかかるのですが、元のサイズが 0 x 0 なので大きさを無限大にすることができます。
Step 4
その状態で、座標を変更します。
(Step 3 の図参照)
Step 5
その後、通常のコスチュームと大きさに戻します。
一度違うコスチュームに変更するので、不用意にコスチューム変更が画面に反映されないようにしておくために「画面を再描画せずに実行する」にチェックを付けておく、といった形です。
(Step 3 の図参照)
別解
もう少しまともそうな方法として、透明で大きなボックスをコスチュームにつけておく という方法があります。こちらのほうがまだ将来的にも使える(梯子を外されない)方法かもしれない。透明で大きなボックスを描いておくことで、上記ほどではないが X 座標と Y 座標をある程度外側まで拡大することができる。これで十分な場合はこちらを採用しても良い。
違いとしては、今回の方法の場合は無限に移動できる、という点。
これをしないことによる問題の例
Jerrydog では、スクロールするオブジェクトが正しく画面外に流れていかずに、浮き上がる ような振る舞いをしてしまいます。X, Y 座標として画面外の座標を指定できるようになると、画面の端で詰まってしまうことなく自然に流れていくようになります。
(左の図)右下の飛び出してるヤツ、なんだ?!
(右の図)自然にスクロール
間違いやご指摘などありましたら、ぜひコメントくださいませ~。
-
最近のプレイ動画に関するガイドラインはあったんですが、音楽の公開とかアレンジとかはあまり見当たらなかった。。。あと、問い合わせ窓口は(当たり前だが)カスタマーサポートなのでこういう質問の入り口が分からなかった。 ↩