02) そこを動くな?!
 今回は、そこを動くな?!と題してお送りします。

VBで、ちょっとしたアニメーションもどきを作ろうと思った場合、簡単な方法として ピクチャーやイメージのオブジェクトを使って、その座標を動かしますね。
例えば、

    Dim i as Integer

    For i = 1 to 10
        Picture1.Left = Picture1.Left + 1
    Next

と言うような簡単なものでも、左へ10コマ移動しますね。(このままでは、速すぎて見えないでしょうが・・・)
アニメーションに限らず、グラフィックオブジェクトの配置を動的に変更したい場合も、LeftやTopといったプロパティを変更して配置しますね。

実は、そういうものを作ろうと思って始めたのですが、NS BASICではこれができないらしいのです。(らしい、なんて自信なさそうですが・・・) 確かに、マニュアルを見てみると、TopやLeftといったプロパティは、「デザイン時にセット」と書かれています。
念のため、このようなコードを書いて、試してみました。
Prog
残念ながら、これはコンパイル時にハネられました。
Err
要するに、配置したオブジェクトは、そこを動くな、と言うことですね。(やっと、タイトルだ〜)

と言うことで、他の方法を考えました。
NS BASICでは、グラフィックオブジェクト(Bitmapというオブジェクト)にビットマップイメージを割り当てる以外の描画方法として、直接グラフィックイメージを描画する方法があります。
DrawBitmap というコマンドを使うと、プロジェクト内に含んでいるビットマップイメージを描画することができます。
書式は、
    DrawBitmap イメージの番号,横軸,縦軸
という書式で、イメージの番号とは、NS BASICのプロジェクトファイルに、ビットマップを追加した時に、システム側が割り当てる番号です。
この横軸と縦軸の値をグローバルな変数を使って、適当に変化させれば、任意の位置に描画できる気がします。
ここで、気になったのは、オブジェクト移動するわけではなく、毎回描画するわけだから、速度的に遅いのでは・・・と言う事です。
今は昔の「キャラクター定義」という言葉を思い出しました。そう、画面上でチラついてしまう、という過去の体験です。(古いか?) MSXなんかでスプライトが使えたときは楽だったなぁ、などということも思い出しましたが、他に方法がなさそうなので、とりあえず作ってみました。
画面の何もないところをタップすると、その方向にちょっとだけロゴマークが動くだけです。
1回タップすると、2ピクセル動く仕組みですが、毎回描画している割には、サクサク動くではありませんか。これなら、動的に画面を作ってもダイジョウブですね。
(このファイルは、CreaterIDがTestになっています。)
そう言えば、昔話を思い出したついでに、ビットマップファイルの作り方も昔を思い出しました。
Ami
こんな風に、移動量の2ピクセル分に相当する余白をキャラクターの周囲につける方法です。そうすれば、描画は1回で済み、チラツキが抑えられ、速度も速くなるでしょう。(手法は古いなぁ)

さて、第2回目、いかがでしょうか?
私も、内容の方向性が決められない徒然レポートなので、わかりにくい面もあるかと思いますが、ご勘弁下さい。
NS BASICの購入を検討されている方で、疑問な点がありましたらご一報下さい。できるだけ、テーマにしていきたいと思います。