Cocos Creator で 3Dゲームを作る その5

Uncategorized
518 words

全てのブロックを壊したらゲームクリアとなるようにします。

前回

https://noitaro.github.io/cocos-creator-3d-block-breaking-4/

今回の目標

ゲーム画面をクリックしたらボールが動き出すようにする。

全てのブロックを壊したらゲームクリアとする。

ブラウザーで遊べるようにしました。

https://noitaro.github.io/block-breaking/

ラベル追加

ゲーム状態を表示するラベルを追加します。

経過時間を表示するラベルを追加します。

処理修正

「Helloworld.ts」の処理を修正します。

変数追加

1
2
3
4
5
6
7
8
9
10
11
12
@property(cc.Label)
Message: cc.Label = null;

@property(cc.Label)
Time: cc.Label = null;

@property(cc.Node)
Blocks: cc.Node = null;

IsStarted: Boolean = false;

StartTime: number;

上3つの変数が、処理で使うコンポーネントを保持するための変数です。

下2つの変数が、処理中に状態を保持するための変数です。

コンポーネントを登録

先程追加した変数に、コンポーネントを登録します。

それぞれ、同じ箇所にマウスドラッグで移動させます。

開始時の処理を追加

start関数に下記処理を追加

1
this.node.on(cc.Node.EventType.MOUSE_DOWN, this.onMouseDown, this);

この処理は、マウスクリックをした時に動く処理となります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
onMouseDown(event: cc.Event.EventMouse) {
switch (event.type) {
case "mousedown":
// イベント削除.
this.node.off(cc.Node.EventType.MOUSE_DOWN, this.onMouseDown, this);
// メッセージ非表示.
this.Message.string = "";

// ボールを動かす
let rigidBody = this.Ball.getComponent(cc.RigidBody3D);
// -3000 〜 3000 のランダム値.
let rnd1 = (Math.random() * 3 * 2 - 3) * 1000;
let rnd2 = (Math.random() * 3 * 2 - 3) * 1000;
rigidBody.applyImpulse(cc.v3(rnd1, 0, rnd2), cc.v3(0,0,0));

this.StartTime = Date.now();
this.IsStarted = true;
break;

default:
break;
}
}

終了時の処理を追加

update関数に下記処理を追加

1
2
3
4
5
6
7
8
9
// 終了判定.
if (this.Blocks.childrenCount == 0) {
// ボール停止
let rigidBody = this.Ball.getComponent(cc.RigidBody3D);
rigidBody.sleep();
// メッセージ表示.
this.Message.string = "ゲームクリア!";
this.IsStarted = false;
}

全部のブロックが消えたら、ボールを停止させて「ゲームクリア!」が表示されます。

経過時間を表示する処理を追加

update関数に下記処理を追加

1
2
3
4
5
6
7
8
if (this.IsStarted)
{
// 経過時間更新.
const diff = Date.now() - this.StartTime;
const minute = Math.floor(diff / 60000);
const second = Math.floor(diff / 1000) % 60;
this.Time.string = `${( minute < 10 ) ? '0' + minute : minute}:${( second < 10 ) ? '0' + second : second}`;
}

ゲームプレイ中は 経過時間 を更新するように処理します。

動作確認

これで完成です。

動作確認をしましょう。

ゲーム開始時

ゲームクリア時