05) 窓は使えるの?
 さて、前回、CreateWindowを使って、スクロールを実現しました。
つまり、NS Basicでもスクロールさせることができるぞ、と言うことですが、今回は、実用性について考えてみます。スクロールというと、大抵はゲームなどに使えるのでは?と思うのではないでしょうか。そんなことを考えながら、お話することにしましょう。

スクロールを使った時に、まず最初に気になるのは、スピードではないでしょうか?
そんなことで、現在作成中のアプリ「AmiSlot」を紹介しつつ、お話を進めることにしましょう。
では、ZIP形式LHA形式のどちらかをクリックして、ダウンロードして解凍して下さい。解凍後、AmiSlot.prcを通常通りインストールして下さい。
アイコンからスタートすると、このような画面が表示されます。


名前の通り、スロットマシンです。見てくれは悪い上に、賭け金の設定すらまだ作っていませんので、いきなり右のレバーをタップして下さい。ドラムが回転を始めます。
しかし、どうでしょう?なかなかキレイなスクロールをすると思いませんか?ドラムを表示している部分は、縦50横90ピクセルのグラフィックウィンドウを定義してあります。そこに幅30ピクセルのBitmapを3つ表示しています。スクロールは、10ピクセル毎のスクロールです。
これがドラムの1つですが、実際に表示されるのは、50ピクセル分になります。


(あ、パチスロではありませんので、適当に回転して適当に止まります。ついでに、アタリ・ハズレもありません。ただ、回るだけです・・・) このドラムは、幅こそ30ピクセルですが、縦は660ピクセルの長さを持っています。この、長いドラムの最初の座標を動かして、動いているように見せています。
模式的に表すと、こんな感じです。赤枠内が実際に見えている部分です。


ビットマップを表示するのは、Drawbitmap (ビットマップID),X座標,Y座標 という書式でしたね。このうち、Y座標が-660〜0に動くわけです。そう、常に「マイナス」の値にすることで、スクロールを実現しています。
3つのドラムの動きを見る限り、まあ、スクロールとしては使えるのではないでしょう。また、描画速度はそこそこあるようですね。

さて、スクロールと言えば、もう1ヵ所、スクロールできる部分を作ってあります。それは、画面下のアタリ図柄表(?)です。


この長いグラフィックは、ドラムが回転していない状態で、上下ボタン(ハードウェアキー)によってスクロールさせることができます。
ここでのポイントは「ドラムが回転していない状態」ということです。
NS BasicはVBライクなイベントドリブン型なので、何かをしながら何かをする、ということが妙に苦手なわけです。例えば、VBならタイマー等を使って、スクロールさせておくわけですが、NS Basicには、そういうコントロール類がない上、イベント類はユーザー側からのタップやキー入力しかありませんので、基本的には、スクロールさせながら、何かをすることは、困難です。
できないわけではありませんが、回転しているドラムを観察してみてください。ドラムが1つ止まる毎に、回転速度が速くなりますね?そう、描画が速いと言えども、やはり別の処理をするほどの余裕はないという点を考慮すると、やはり、困難なのでしょう。
そうは言っても、AmiSlotのようなテーブルゲーム用途では問題がありませんので、使い方次第、ということですね。

もう1つ、地味な存在ですが、レバーをタップした時にアニメーションしているのに気が付いたでしょうか?これは、3枚のグラフィックをDelayを使って、0.1秒ずつ遅らせて表示してるだけです。

  
多少、スクロールとは話題が異なりますが、NS Basicでアニメーションもいけそうですね。やはり、描画速度が比較的速いことが効いているようです。
しかし、ここでも1つ気が付くことがあります。DrawBitmapには、縦と横の座標を指定できるだけで、他に何もありません。つまり、常に描画しようとするビットマップで上書きされてしまい、下のものは消されてしまうわけです。NS Basicで扱えるビットマップは、白黒のものですが、黒のところは黒、白のところは白、となっていますので、例えば、スーパーマ○オのようなスクロールゲームを作ろうとしたとき、キャラを表示しても、その周りが白抜きになってしまうわけです。
この点は、結構重要ですね。ゲームで背景の上に、キャラクターを重ね合わせたい時に、かなり制約ができてしまいますから、せめて、ANDやORやXORなどの描画モードを指定できると良かったですね。ま、そもそも、画面上に何が表示されているのかを得る関数もありませんので、このあたりは、APIの正式サポートまで待つしかなさそうです。

このように、スクロール自体は、描画速度の恩恵により、結構な速度で使えることがわかりましたが、その周辺の作り方に工夫が必要であったり、制約が必要だったりすることもわかりました。
とはいえ、BASICは、そのプログラムの作成プロセス自体も楽しめる点が魅力だと思っていますので、NS Basicは、その点を見事にクリアしており、私を含めて、NS Basicユーザーの皆さんも「ちっ、機能が少なくて使えないよん!」というより、楽しんでおられる方が多いのではないでしょうか?
そうそう、AmiSlotは、現在、作成中ですので、ご意見、ご要望ありましたら、ご連絡下さい。