ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

ゲーム開発では、ゲームの雰囲気を演出するために効果音を使う必要があることが多いため、この記事では、Cocos Creator ゲーム開発における効果音コンポーネントのカプセル化と使用についてまとめます。

1. Cocos Creatorでのオーディオ再生の基本

1. 基本

【1】AudioSourceコンポーネント公式ドキュメント: http://docs.cocos.com/creator/manual/zh/audio/audio.html

【2】cc.audioEngine公式ドキュメント: http://docs.cocos.com/creator/manual/zh/audio/audio.html

Cocos Creator には 2 つのオーディオ再生方法があります。AudioEngine と AudioSource はどちらもオーディオを再生できます。両者の違いは、AudioSource はシーンに追加してエディターで設定できるコンポーネントであることです。 AudioEngine はエンジンによって提供される純粋な API であり、スクリプト内でのみ呼び出すことができます。

共通点:基本的には AudioClip オーディオ リソースを処理し、Cocos Creator エディターでコンポーネントをマウントする必要があります。

個人的には、AudioSource コンポーネントを置き換えてサウンドを再生するにはこれを使用することをお勧めします。インターフェイスが完成しており、テストも効果的です。AudioSource コンポーネントと同様のスクリプトをカプセル化して使用できます。

方法1: AudioSourceコンポーネントを使用して再生する

空のノードを作成し、そこに別のコンポーネントを追加します-> AudioSource

スクリプトにAudioSourceをプリセットし、実際のニーズに応じてスクリプトの外部インターフェースを次のように改善します。

cc.クラス({

	プロパティ:

		オーディオソース: {

			タイプ: cc.AudioSource、
			デフォルト: null

		},
	},
	遊ぶ() {

		オーディオソースを再生します。

	},
	一時停止() {

		this.audioSource.pause();

	},
});

方法2: AudioEngineを使用して再生する

次の例の properties オブジェクトに示すように、スクリプトで audioClip リソース オブジェクトを定義します。

再生するには、cc.audioEngine.play(audio, loop, volume); を直接使用します。以下の onLoad の例に示すように。

cc.クラス({

	プロパティ:

		オーディオ:

			デフォルト: null、
			タイプ: cc.AudioClip

		}

	},
	オンロード() {

		this.current = cc.audioEngine.play(this.audio, false, 1);

	},
	onDestroy() {

		cc.audioEngine.stop(this.current);

	}

});

AudioEngine が再生されているときは、完全な AudioClip オブジェクト (URL ではない) が渡されることに注意してください。したがって、再生インターフェースでオーディオ URL を直接入力することはお勧めしません。代わりに、最初に AudioClip を定義してから、オーディオをエディターにドラッグすることをお勧めします。

2. 一般的な方法

【1】コンポーネントオーディオソース

play ( ) オーディオクリップを再生します。

stop ( ) 現在のオーディオクリップを停止します。

pause ( ) 現在のオーディオクリップを一時停止します。

resume ( ) 再生を再開します。

【2】サウンドシステム cc.audioEngine

// バックグラウンドミュージック、ループ

cc.audioEngine.playMusic(ソース);

cc.audioEngine.stopMusic(ソース);

// 短い効果音

cc.audioEngine.playEffect(ソース);

cc.audioEngine.stopEffect(ソース);

上記の最初の方法はネイティブ プラットフォームで多くのバグが発生するため、当社のゲームではすべて 2 番目の方法を使用してサウンドを再生します。

2. Cocos Creator サウンドエフェクト管理コンポーネントのパッケージ化

1. サウンド管理クラスSoundMgr.tsを作成する

定数{
	ccクラス、
	財産
} = cc._デコレータ;

@ccクラス

エクスポートデフォルトクラスSoundMgr {

	sound_path: 文字列 = 'res/sounds/';

	// sound は音楽の名前とオーディオオブジェクトのキーと値のペアを格納します sounds: {
		[キー: 文字列]: 任意
	} = {};

	有効: ブール値 = true;

	音楽: 文字列 = '';

	// シングルトン モード protectedstatic インスタンス: SoundMgr;

	パブリック静的getInstance(): SoundMgr {

		if (!this.instance) {

			this.instance = newSoundMgr();

		}

		このインスタンスを返します。

	}

	// サウンドリソースを追加 addSound(key: string, clip: cc.AudioClip) {

		this.sounds[キー] = クリップ;

	}

	playFx(fxName: 文字列) {

		if (!this.enabled) を返します。

		cc.audioEngine.playEffect(this.sounds[fxName], false);

	}

	playMusic(音楽名: 文字列) {

		this.music = 音楽名;

		if (!this.enabled) を返します。

		cc.audioEngine.playMusic(this.sounds[musicName], true);

	}

	音楽を停止する() {

		cc.audioEngine.stopMusic();

	}

	有効にするかどうかを設定します(有効: ブール値) {

		this.enabled = 有効;

		有効になっている場合

			this.playMusic(this.music);

		} それ以外 {

			cc.audioEngine.stopAll();

		}

	}

	getEnable() {

		returnthis.enabled;

	}

}

2. 初期化中にオーディオリソースをロードする

Cocos Creator ビジュアル編集ツールを使用して、ゲームシーンとリソースを次のように設定します。

コードを通じてサウンドを動的に読み込むため、すべてのサウンド ファイルを保存する sounds フォルダーを resources フォルダーに配置します (上図を参照)。

次に、GameMgr.ts を作成し、Canvas ノードにマウントします。

オンスト
	ccクラス、
	財産
} = cc._デコレータ;

「SoundMgr」からSoundMgrをインポートします。

@ccクラス

exportdefaultclassGameMgrextends cc.Component {

	サウンドをロードする(){

		// コードを通じて動的にロードされるリソースはリソース フォルダーに配置する必要があることに注意してください cc.loader.loadResDir('sounds', cc.AudioClip, function(err, clips) {

			console.log("クリップをロード:", クリップ);

			もし(エラー){

				console.log("エラー:", err);

			}

			(i = 0とすると、i

				SoundMgr.getInstance().addSound(クリップ[i].name, クリップ[i]);

			}

		});

	}

	オンロード() {

		サウンドをロードします。

		console.log("サウンド:", SoundMgr.getInstance().サウンド);

	}

	再生クリック() {

		console.log("プレイ");

		SoundMgr.getInstance().playMusic('spring_music');

	}

	一時停止クリック() {

		console.log("一時停止");

		SoundMgr.getInstance().stopMusic();

	}

}

GameMgr カスタム コンポーネントの onLoad メソッドで、loadSounds を呼び出して、ゲームに必要なすべてのサウンド リソースを読み込みます。同時に、再生および一時停止インターフェース メソッド onPlayClick および onPauseClick が GameMgr.ts に提供されます。

再生ボタンと一時停止ボタンによって呼び出されます。

3. 通話の再生と一時停止

4. テストを実行する

すべてのサウンド リソースが正常に読み込まれ、再生ボタンと一時停止ボタンをクリックするとテストが合格します。

3. 注意事項

注意: オーディオ再生関連の設定がすべて完了しているにもかかわらず、一部のブラウザでプレビューまたは実行したときに音が聞こえない場合は、ブラウザの互換性の問題が原因である可能性があります。たとえば、Chrome では WebAudio の自動再生が無効になっており、デフォルトではオーディオは Web Audio を使用して読み込まれ、再生されます。この場合、ユーザーはリソース マネージャーでオーディオ リソースを選択し、プロパティ インスペクターでオーディオ読み込みモードを DOM Audio に変更して、ブラウザーで正常に再生する必要があります。

以上が、ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法の詳細です。CocosCreatorのサウンド処理の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Cocos クリエイターのタッチ イベント アプリケーション (タッチして複数の子ノードを選択する例)
  • iOS開発でcocos2dを使用してタッチイベントを追加する方法
  • Cocos2d-x タッチイベントの例
  • CocosCreator最適化DrawCallの詳細な説明
  • CocosCreatorがスキル冷却効果を実装
  • cocoscreatorプレハブの詳しい説明
  • CocosCreator でレイヤー管理に常駐ノードを使用する方法
  • CocosCreator ScrollView 最適化シリーズ: フレーム読み込み
  • CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明

<<:  CentOS7 のシステム サービスに Nginx を追加する方法

>>:  Centos6.5 の rpm パッケージから mysql5.7 をインストールするときに発生する初期化エラーの解決策

推薦する

docker-machineの使い方の詳しい説明

Docker-machineはDockerが公式に提供しているDocker管理ツールです。これは d...

Vue ElementUI フォームのフォーム検証

フォーム検証は、フロントエンド開発プロセスで最もよく使用される機能の 1 つです。私の個人的な仕事経...

MySQL パフォーマンス チューニングについて知っておくべき 15 個の重要な変数 (要約)

序文: MYSQL は最も人気のある WEB バックエンド データベースです。最近、NOSQL がま...

Vue の this.$store.state.xx.xx に関する簡単な説明

目次これを Vue.$store.state.xx.xxストアからデータを取得する私のプロジェクトフ...

JavaScript フロー制御 (ループ)

目次1. forループ2. 二重の for ループ3. whileループ4. dowhileループ5...

Django は Pillow を使用して検証コード機能を簡単に設定します (Python)

1. モジュールをインポートし、検証状態を定義する PIL から Image、ImageDraw、...

JS オブジェクト コンストラクター Object.freeze

目次概要例1) オブジェクトをフリーズする2) 配列をフリーズする3) 浅い凍結4) ディープフリー...

JS でタブ効果を書く

この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...

ネイティブ JS 音楽プレーヤー

この記事の例では、音楽プレーヤーを実装するためのJSの具体的なコードを参考までに共有しています。具体...

React+Antdはテーブルの追加、削除、変更の例を実装します

目次テーブル/index.jsテーブル/モデル/index.jsテーブル/モデル/モジュール/bas...

自己終了XHTMLタグを書くときに注意すべきこと

XHTML の img タグはいわゆる自己終了タグであり、XML では完全に合法です。 XHTMLの...

Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング

目次序文1.1 機能1.2 要素の可視性を制御する方法1.3 初期レンダリングの比較1.4 スイッチ...

iframe なしの div ネスト HTML

最近、宿題をしているときに、iframe を使用せずにページをネストする必要があったため、jquer...

aタグに下線を付け、クリック前後で色を変える方法

コードをコピーコードは次のとおりです。リンクフォントサイズ: 12px;色: #000000;テキス...

MySQLで大きなテーブルをエレガントに削除する方法について簡単に説明します

目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...