3.6 画面のスクロール

今回の目的
 スタッフロールやパノラマ画面に用いられる画面のスクロール方法を解説します。

 やり方はいろいろあると思いますが、ここではbltやlspを使います。

 


スタッフロールの作り方
 フリーゲームのスタッフロールでは、主に背景やスプライトを代わる代わる表示する方法が取られてますが、 NScripterでは映画のように上から下へ、右から左へスクロールするスタッフロールを作ることも可能です。

staff.jpgをダウンロードしてimageフォルダ内に置いてください。

*define

game
*start

btndef "image\staff.jpg"

for %0=0 to 1920

blt 140,0,360,480,0,%0,360,480
wait 20

next

ofscpy

click
end
  
 ダダーッとスタッフロールが流れ、最後にピタッと止まります。

 使っている命令文は、全て今までに習ったものです。

 「btndef」でスタッフロールの画像を読み込み、
 「blt」で画像を1ドットずつ下にずらしながら表示していきます。
 画像のY座標となる変数を「for」ループで回せば、
 画面を書き換えるごとにY座標に1ドットずつ加算されることになります。

 スクロールの速さは、「wait」と「step」の値によって変えられます。

 最後に「ofscpy」を書けば完成です。

 スプライト画像を用いても作れますが、あまりお勧めしません。
 理由は、スタッフロールにしてはあまりにも重すぎるからです。

 


パノラマ画像のスクロール
 パノラマ画像はスタッフロールとは少し勝手が違います。
 CG鑑賞モードなどでは、プレイヤーに画像を自由にスクロールさせる必要があります。
 ここでは、スプライトとボタンを用いて左右にスクロールできるシステムを作ります。

haikei2.jpg,vec_l.jpg,vec_r.jpgをダウンロードしてimageフォルダ内に置いてください。

*define

effect 10,10,1000

game
*start

lsp 0,":a/2,0,3;image\vec_l.jpg",10,215
lsp 1,":a/2,0,3;image\vec_r.jpg",580,215
lsp 2,":c;image\haikei2.jpg",0,0
print 10

*btnset

trap off
cell 0,0
cell 1,0
print 1
spbtn 0,1
spbtn 1,2

*btnloop

btnwait %0
if %0==1  trap *btnset:goto *left
if %0==2  trap *btnset:goto *right
if %0==0  goto *btnloop
if %0==-1 goto *btnloop

*right

if %1=-640 goto *btnset
amsp 2,%1,0
print 1
dec %1
goto *right

*left

if %1=0 goto *btnset
amsp 2,%1,0
print 1
inc %1
goto *left

 
 押した矢印の方向に画面がスクロールします。

 一見長くて大変そうですが、ほとんど既に知っている命令文を使っています。
 順を追って見ていけばそう難しくはありません。

 まず、スプライトでスクロールさせたいパノラマ画像ボタン画像を表示します。
 ボタンを選択することで左右のスクロール処理へとジャンプさせます。

 *right、*left内の処理は、
 スプライト画像を1ドットずつ横にずらして書き直しているだけです。
 「amsp」はスプライト画像を移動させる命令です。
 「スプライト番号」「移動させたいX座標、Y座標」を指定します。
 そして画像の端に到達するか、クリックをすることでボタン選択へ戻ります。

 一度ボタンを押すとセル1のままになるので「cell」でセル0に戻すことも忘れずに。

 少し説明不足な気もしますが、ここまで来たら自力で読み取れるようにしましょう。

 


まとめ
 スクロール方法についてはあまり知られていないためか、
 実際に使われているゲームはほとんど見たことがありません。
 しかし工夫次第では、ここで紹介した使い道以外にも画期的な利用法があるかもしれません。

 スクロールの速さはPCのスペックによって変わります。
 特にスプライトを用いた場合は差が顕著に現れるようです。
 
 次節は、時間制限についてです。

 


前へ    TOPへ戻る    次へ