初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

VisualBasic 2015 入門

27.突破2 Timer とマウスカーソル座標

 

今回は [ 突破ゲームを作ろう ] の続きです。

前回、絵を用意しました。
絵というよりはバーツですね。
これらを使って遊びを作っていきます。

 

 

Timer コンポーネントを使おう

シューティングやアクション、その他のジャンルでもゲームならば必要になってくるのが
一定の間隔で処理する技術です。
今まで作ってきたもののように、ユーザーがボタンを押したら計算する、
または、結果を出力するタイプなら必要ありません。

一定の間隔で動かす方法はいくつかあるのですが、
簡単にあつかえる Timer を使ってみましょう。
コンポーネントの中にあるのでダブルクリックして組み込みます。

 

timer コンポーネントを使おう

 

ボタンなどはコントロールというのに対し、Timer はコンポーネントです。
といっても、ざっくり言えばどちらも部品なんですけどね。
違いを簡単に言うと、ユーザーインターフェースを持ったコンポーネントがコントロールと
呼ばれてたりします。

 

 

それでは Timer の Tick イベントを用意します。
Timer1 を選択した状態で、プロパティからイベントの画面で Tick をダブルクリックします。
これで Timer1_Tick が作成されます。

 

vb timer Tick イベント

 

 

ここでテストしてみます。
Timer1_Tick の中に Console.WriteLine ( Date.Now ) を追加します。
これは出力ウィンドウに日時を表示する命令です。

しかし、これだけで Timer1 は動いてくれません。
Enabled プロパティを True にする必要があります。
ついでに Interval プロパティを 1000 に変更しましょう。


vb timer を使う

 

 

実行すると出力ウィンドウに、1秒間隔で日時が表示されます。
Interval プロパティは Timer1_Tick を呼び出す間隔を設定しています
単位はミリ秒(1000ミリ秒=1秒)です。

 

vb timer 1秒間隔で日時を表示

 

Interval プロパティについて注意があります。
単位はミリ秒なのですが、最小設定値は 15 ミリ秒ぐらいです。
それから精度が少し低いようです。
20 ミリ秒に設定すれば、必ず 20 ミリ秒ごとに動く、
という訳ではないようです。
この設定は目標値という感じで、設定された間隔で動くように努力するレベルなので
状況によっては設定値をオーバーしてしまうようです。
時間を計るような精確さが必要なときは、何か対策を考えましょう。

 

 

マウスのカーソル座標を取得してみよう

プレイヤーが操作する四角をマウスを使って動かすには、マウスのカーソル座標を
取得する必要があります。
まずは座標を取得する方法を学んでいきましょう。
プログラムを次のように変更してください。

 

vb マウスのカーソル座標を取得する

 

座標を格納するために Point 構造体の Cpos を用意しました。
ここに PointToClient ( Cursor.Position ) を使ってマウスカーソル座標を
取得しています。
Cursor.Position を使ってカーソルの画面座標を取得して
PointToClient で画面座標をクライアント座標(Form1の座標)に変換しています。

 

 

ちょっと何を言っているのか分からなくなってきたので実行してみましょう。
実行したらカーソルをゆっくりと動かしてみてください。
出力ウィンドウに座標が表示されます。

 

vb カーソル座標の取得方法

 

 

画面座標とクライアント座標ですが、次のようになっています。
画面座標は、画面の左上を基点とした座標のことです。
クライアント座標は、この場合 Form1 の左上を基点とした座標となります。
ゲームなどでマウスの座標を直接使いたいときには、クライアント座標を
使うことになります。

 

画面座標とクライアント座標

 

それから構造体についてですが、くわしい話はここではしません。
変数の親分みたいなもので、複数の変数をまとめたものと思ってください。
今回使用した Point 構造体は、座標xとyをまとめて管理できるように
用意されたものです。

 

 

四角をマウスで動かしてみよう

みどり色の四角 Player をマウスで操作してみましょう。
とても簡単です。
Player.Location にマウスの座標を代入するだけです。
それから Timer1 の Interval プロパティを 33 に変更してください。
これで1秒間におおよそ 30 回くらい Timer1_Tick が呼ばれることになります。

 

vb 自機をマウスで動かす

 

 

実行してみましょう。
マウスカーソルを動かすと、四角も一緒に付いてきます。

 

vb マウスで移動させる

 

 

このゲームで四角を操作するとき、左右にだけ動かせるようにします。
左右のみとは、つまりx座標のみ操作するということです。
プログラムを変更しましょう。
x座標のみ設定したい場合には Left プロパティを使います。
実行して、マウスの左右の動きにのみ一緒に動くことを確認してください。

 

vb 左右の動き x座標の動き

 

 

四角をフォーム内にずっと表示しよう

四角をマウスで操作できるようになりましたが、問題があります。
マウスをフォーム外へ移動すると、四角も移動して消えてしまうのです。

 

四角が画面外へ出てしまう

 

 

プレイヤーが操作する自機(四角)が見えなくなることは、ゲームでは
やられたときぐらいです。
マウスをフォーム外へ移動しても、四角はフォーム内にとどまるように変更します。
変更したら、実行して四角がとどまることを確認しましょう。


自機が画面内にとどまるように変更する

 

フォームの左側は座標0より小さく、右側は Width より大きいです。
ここでの Width は Form1 のとなります。
四角が見えるようにするため Player.width (四角の幅)を引いた座標で
比較しています。

 

vb フォームの外へでないようにする