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

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

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

Visual C# 2017 入門

28.突破3 初期化とクリックイベント

 

今回は [ 突破2 Timer とマウスカーソル座標 ] の続きです。

パソコンで動かすゲームを作るとき、注意したいことがあります。
それは操作方法です。
パソコンではマウスとキーボードを使いますが、ゲームでマウスと
キーボードの両方を使ったりすると、面倒に感じられるときがありますね。
可能であればマウスだけ、または、キーボードだけにしたほうが遊びやすいです。

 

 

プレイヤーの初期化をしよう

プレイヤーの初期化をします。
ゲーム開始のときや、プレイヤーを飛ばして画面外へ出たとき使います。
ここではゲーム開始のときの初期化を作ってみましょう。

まず、デザイン画面で Form1 をダブルクリックして Form1_Load を作ります。
その下にメソッド initPlayer を作ってください。
プログラムを次のように変更しましょう。

 

プレイヤーの初期化

 

Player.Top はY座標の指定に使います。
44 行目で使っている Height は Form1 の高さです。
これにプレイヤーの高さ2個分( Player.Height * 2 )を引くことで、画面下部に
配置しています。

実行して動作を確認しましょう。

 

 

プレイヤーを上に移動させよう

次は、プレイヤーを上に移動させる仕組みを作ります。
上に移動させるのはY座標を使うので、Top プロパティを操作します。
まず、メソッド movePlayer を作成し、これを timer1_Tick から呼び出すように
します。

 

プレイヤーを上へ移動

 

 

Player.Top -= 20
これで上に移動します。20 の値を小さくすればゆっくりと移動し
大きくすれば速く移動します。
次の if 文では、画面外へ出たかをチェックしています。
出たらプレイヤーの初期化をして、画面下部へ移動させます。

実行してみましょう。
四角が上に移動して画面から出ると、また下から出てくる動作をくり返します。

 

くり返し上へ移動する

 

 

動作を確認してみると、思ったより動きがカクカクしてますね。
そこで timer1 の Interval を 33 から 20 へ変更してみます。
これで呼び出し回数が増えるので、プログラム側も対応します。
25 行目の移動値を 20 から 12 へ変更しましょう。

 

更新の速度を変更する

 

実行してみると少しなめらかになりました。

 

 

クリックで発射する仕組みを作ろう

クリックでプレイヤーを発射させます。
そのためにはマウスのクリックでイベントが発生するようにします。

Form1 のプロパティからイベントへ、クリックして切り替えます。
そして MouseDown をダブルクリックします。

 

マウスクリックを取得

 

プログラムの一番下に Form1_MouseDown が追加されます。
ここにマウスをクリックしたときの処理を書きます。

 

 

クリックで発射するようにプログラムを変更します。
思ったより簡単にできます。

 

クリックで発射する仕組み

 

発射しているかどうかのフラグ shotFlg を作成し
発射中ならプレイヤーの上移動 movePlayer を有効にするだけです。

実行してみましょう。
マウスのクリックでプレイヤーが上に移動することを確認してください。
ここで注意です。
マウスカーソルが他のコントロールの上にあると、クリックしても反応しません。
( Form1 の MouseDown イベントしか用意していないからです )
何もないところでクリックしましょう。

 

 

発射処理のポイント

発射処理のポイントを説明します。
timer1_Tick の中でプレイヤーの上移動を行っていますが、ここで return
使ってメソッドから抜けています。
つまり上移動をしているときは、横移動の処理(43 から 51 行目)は行われなくなります。

 

return でメソッドから抜ける

 

 

もう1点。
プレイヤーの初期化で shotFlg = false をしているところに注目です。(64 行目)
プレイヤーが画面外へ出ると initPlayer が呼ばれます。
つまり、ここで発射していない状態にセットするだけで
上への移動処理は行われなくなります。

 

初期化処理で発射フラグをリセットする

 

 

すき間を横に移動させよう

すき間を横に移動させます。
方法としてはプレイヤーの上移動と同じです。
横の移動なので Left プロパティを使います。

 

オブジェクトを横に移動させる

 

実行してみましょう。
すき間が左から右へ移動するのが確認できます。