■宝の地図
ある日、彼は宝の地図とおぼしき、汚れた布切れを見つけた。
最初は、自分でもまさか……と思ったのだが、よくよく見てみると、いかにも本物っぽい気がしてきた。ぼんやりとではあるが、地図のように見える図形がいくつかあり、端々には、文字のようなものも書かれているようだ。
ほとんどの文字は、かすれていたり、ちぎれて途中で切れてしまっていた。だが、たった一文、短い文章ではあったが、なんとか読み取れそうなものを見つけた。そして、そこにはこうあった。
『上から5、右から10』……思わず呟いた。『どこを始点にしてんだよ……これ』
はい。全くプログラミングと関係のない小話です。でも、今回の講座には、これとよく似た考え方が必要な場面があるのです。
今回は、プログラミングする際に必要となる、表示位置に関する概念を解説します。
表示位置、とひとくちに言っても、中々想像がつかないかもしれませんが、プログラミングする際には欠かせない概念のひとつです。
特に、ゲームのプログラミングに関して言えば、これがキチンとわかっていないと、キャラクターひとつ表示することができません。まぁ、表示はできたとしても、それを滑らかに動かしたりすることはできないでしょう。
今回の概念をしっかり覚えて、基礎を固めておきましょう。
■表示位置の概念
さて、以前の講座で、ユーザーフォーム上に画像を表示させる方法を解説したのですが、覚えているでしょうか。
具体的には、イメージコントロールを配置して、そのコントロールのPictureプロパティに任意の画像をロードさせればよかったんでしたね。
その後、様々なプロパティを変更・設定することによって、背景の透けた画像を用意する方法なども解説しました。いずれにしても、キチンと順を追って進めてきた方なら、ここまでは問題ないはずです。
さて、今回は、このキャラクターを表示したコントロールなどの、様々なモノ(オブジェクト)が、どのような概念で、画面上に表示されているのか考えてみます。具体的には、その表示される位置は、どのようにして決められているのか? ということですね。
VBAに限ったことではないのですが、基本的に位置情報というのは2つの要素から成り立っています。その2つの要素とは、ズバリ『横位置』と、『縦位置』の2つです。
・横位置……左端からどのくらいの距離にあるか
・縦位置……上端からどのくらいの距離にあるか
表示したいモノが、ある地点から見て、右の方にいるのか、それとも左の方にいるのか。そして同様に、上の方にいるのか下の方にいるのか。この横位置と縦位置の、2つの位置情報があれば、平面上での正確な位置を表すことができるのですね。
そして、上の枠の中でも太字で表示されていますが、プログラミングの時に最も大切なのは、『
左端から~』と『
上端から~』という概念です。下から、とか、右から、ではないので間違えないようにしましょう。
もしも、横位置の値が『0』だったときには、それは左端を表します。同様に、縦位置の値が『0』だった場合には、それは上の端を表します。これは図解すると非常にわかりやすいですね。フォームのはじっこのところです。

そして、横位置の値をプラスしていくと右方向へ。マイナスしていくと左方向へ、表す位置が変動していきます。
同様に、縦位置の場合には、値をプラスするほど下方向へ、マイナスするほど上方向へ、位置が変動します。
この、『横位置の値』と『縦位置の値』を組み合わせることで、ユーザーフォーム上の全ての位置を表すことができるのがわかると思います。
そして、この横位置と縦位置を定義するプロパティが、『
Left・Top
』の2つのプロパティです。
Left
プロパティが横位置を、
Top
プロパティが縦位置を表します。この2つのプロパティを様々に変化させることで、ユーザーフォーム上に表示される位置を、任意の場所に変更することができるのです。

理屈がわかれば、それほど難しくないですよね。
■指定する数値についてさて、ユーザーフォーム上の位置を表すために、縦横2つの情報が必要なのはわかりましたね。そして、それを指定するプロパティとして
Left
プロパティと
Top
プロパティがあるということも、理解できたと思います。
しかしここでひとつ疑問がでてきます。
ユーザーフォーム自体が、横幅100ポイント分の大きさしかないとします。そんな時、それよりも大きな数値の横位置を指定したら、一体どうなるのでしょうか。
実際にやってみればよくわかると思いますが、ユーザーフォーム上に配置したコントロールの
Left
プロパティに、100よりも大きな数値を指定してみると、ユーザーフォーム上から見えなくなってしまいます。
これは
Top
プロパティについても同様です。ユーザーフォームの縦の長さよりも大きな数値を指定すると、やはり、ユーザーフォーム上から見えなくなります。
注意しなければならないのは、ユーザーフォーム上から、対象となるコントロールが『なくなってしまったわけではない』ということです。
あくまでも、横位置や、縦位置が見える範囲の外に設定されているだけであって、コントロール自体がなくなってしまったわけではありません。単純に見えていないだけのことなのです。
その証拠に、プロパティウィンドウにあるドロップダウンリストには、キチンとコントロールが含まれているはずです。

▼

▼

プロパティウィンドウには、こういったコントロールに関する情報が含まれているのですね。このことを知っていると、マウス操作のミスなどでコントロールがどこかへ行ってしまったときや、透明になっていて見えないコントロールを探すときなど、意外と便利ですので覚えておいて損はないでしょう。
■負の世界Left
プロパティや
Top
プロパティには、負の数値を指定することも可能です。マイナスの数値っていうことですね。
2つのプロパティに大きすぎる数値を指定したときと同様に、小さすぎる(マイナスの)数値を指定したときも、やはりユーザーフォーム上から見えなくなります。
ユーザーフォームの左の端が0ポイントですから、それよりも小さい数値を
Left
プロパティに設定すると、左の方向へどんどんめり込んでいって、最終的には見えなくなります。
Top
プロパティなら、ユーザーフォームの上の端が0ポイントですから、それよりも小さい数を指定すると、どんどん上にめり込んでいって、マイナス幅が大きくなればいずれ見えなくなります。
例えば縦にスクロールするシューティングゲームなどでは、敵のキャラクターが出現する際にこの仕組みを活用できますね。
登場するときにはあらかじめマイナスの数値を設定しておいて、徐々に数値をプラスしていけば、画面の外から現れる敵キャラクターを演出できます。突然パッと画面に表示されるよりも、自然な演出だと言えるでしょう。
普通の業務アプリケーションなどでは、
Left
や
Top
にマイナスの数値を指定することはまずないでしょうが、ゲームのプログラミングということになると、こういったテクニックも必要です。
いずれ具体的に解説するとして、今回はそういったやり方もあるということを覚えておきましょう。
さて、今回は表示位置の仕組みについて見てきました。どうでしょうか、理解できたでしょうか。
わかってしまえばどうということはないのですが、初めてのときはどうしても戸惑います。私も最初はちょっとわかりづらかったです。普段の生活ではこのように位置を指定することってないですからね。
ゲームの作成には欠かせない表示位置の概念。しっかり基礎を固めておきましょう。
■格言
Left
プロパティで横位置(左から)
Top
プロパティで縦位置(上から)
2つのプロパティにはマイナスの数値を設定することも可能好きな場所に表示できるようにしておきましょう。
- 関連記事
-