cocoscreatorプレハブの詳しい説明

cocoscreatorプレハブの詳しい説明

プレハブ

プレハブとは何でしょうか? 文字通り、使用前に事前に作成されたノード リソースを意味します。そのプロパティは通常のノードと同じです。事前に作成され、まだ表示されていない通常のノードと見なすことができます。

プレハブの作り方

1. 階層マネージャーで通常のノードを作成し、このノードをリソース マネージャーのアセット フォルダーにドラッグします。管理の便宜上、プレハブを均一に保存するためのプレハブ フォルダーが作成されます。

プレハブノードをダブルクリックすると青色に変わります。これで、シーンに残っているノードを削除できます。ノードを使用する必要がある場合は、プレハブを通じて作成します。

このとき、プロパティ インスペクターには通常のノードと同じプロパティが表示されます。

プレハブの役割

1. 同じタイプのノードをバッチで作成する

基本的には、プレハブを使用してテンプレートを作成し、このプレハブテンプレートをコピーしてバッチを作成します。

ステップ1: バッチでノードを作成し、オブジェクトプールに配置する

 @property(cc.Prefab)
 プレハブ:cc.Prefab = null;
 //プロパティ マネージャーでプレハブ タイプを宣言して、定義されたプレハブをプロパティ マネージャーにマウントします @property(cc.NodePool)
 ノードプール:cc.NodePool = null;
 // プレハブによって作成されたオブジェクトを格納するためのオブジェクト プールを宣言します。プレハブを使用して、一度に同じタイプのノードを十分に作成し、それらをオブジェクト プールに格納します。長期間にわたって大量のノードを作成したり破棄したりしないように、必要なときに取り出し、不要になったら戻します。for(let i:number = 0; i < 100; i++){
 	// 100 個のノードを作成します。let node:cc.Node = cc.instantiate(this.prefab); 
    ノードプールを作成します。 
    //各ノードをオブジェクト プールに入れる}

ステップ2: 必要なときに取り出して使う

node:cc.Node を null にします。
// オブジェクトプールにアイドルオブジェクトがあるかどうかを判定します if (this.nodePools.size() > 0) {
	  // get メソッドを使用してアイドル オブジェクトを取得します。このとき、バッチ作成されたノードを格納するオブジェクト プール nodePools を get のパラメーターとして渡します。その後、プレハブにバインドされたスクリプト (nodePrefab.ts であると仮定) でオブジェクト プールに戻すことができます。 node = this.nodePools.get(this.nodePools);
}それ以外{
	 // アイドル オブジェクトが存在しない場合は、プレハブを通じて作成します。node = cc.instantiate(this.prefab);
}
// 親ノードへのマウントは、手動でのドラッグ アンド ドロップ マウントと同じです。this.node.addChild(node);

ステップ3: 使用後にノードを返却する

// これは上記のプレハブ スクリプト nodePrefab.ts スクリプトであると仮定します。nodePools:cc.NodePool = null;
// 上記の node = this.nodePools.get(this.nodePools); でオブジェクトプールからノードを取り出した後、上記の get で渡されたオブジェクトプールを受け取るためのオブジェクトプールをプレハブスクリプトで定義します。/*nodePool.get() を使用してノードを取得すると、
クリック イベントの登録を完了するために、プレハブ スクリプト nodePrefab.ts 内の再利用メソッドが呼び出されます。
さらに、cc.NodePool.get() は任意の数の任意の型のパラメータを渡すことができ、これらのパラメータはそのまま再利用メソッドに渡されます*/
// 再利用システムコールバックメソッドを実装するだけです。reuse(EnemyPools:cc.NodePool) {
 		// 渡された管理クラスのインスタンスを取得します。get this.EnemyPools = EnemyPools;
 }
 
// オブジェクトをリサイクルする関数を書く hit () {
	// オブジェクトプールが存在するかどうかを確認します if(this.nodePools){
    	// 現在のノードを元の状態に戻します this.nodePools.put(this.node);
    }それ以外{
    	// それ以外の場合はノードを直接破棄します this.node.destroy();
    }
}

2. 特定の時間に表示する必要があるノードを事前に作成します

プロンプトボックスなど

 // 定義したプレハブをプロパティインスペクタにマウントするためのプレハブを作成します @property(cc.Prefab)
  testPrefab:cc.Prefab = null;
	
	// このノードを表示する必要がある場合は、上記のようにプレハブの作成をコピーするだけです。let node = cc.instantiate(this.testPrefab);
	// 親ノードにマウントします this.node.addChild(node);
    

上記はすべてマウントされており、以下は動的ロード方式を採用しているため、@property(cc.Prefab)のようなマウント方式を使わなくてもロードできます。

// 以下のコールバック関数はこれを使用できないため、これに渡す変数を定義する必要があります
m_this = this とします。
/* cc.loader.loadRes を使用して Prefab を動的に読み込みます。まず、assets フォルダの下に resources フォルダを作成し、その下に prefab リソースを配置します。最初のパラメータは resources 下の prefab の絶対パスです。これにより、prefab は 2 番目の関数型パラメータの prefab パラメータで取得されます。*/
[cocos ドキュメント公式サイト](https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html?h=assets)
cc.loader.loadRes("assets/OptionBox", 関数(err, prefab) {
if(!プレハブ){
    cc.log("プレハブは空です");
}
var newNode = cc.instantiate(プレハブ);
if(!newNode){
    cc.log("ノードは空です");
}
// 現在のノードの子ノードとして追加します m_this.node.addChild(newNode);

上記はプレハブを使用するための 2 つの一般的なソリューションです。たとえば、最初の方法は敵や弾丸を一括で作成するために使用されます。2 番目の方法は、繰り返し使用するシナリオや特定の状況でトリガーされるプロンプト ボックスなどのプレハブにすることもできます。

以上がcocoscreaterプレハブの詳しい説明です。cocoscreaterプレハブの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。

以下もご興味があるかもしれません:
  • CocosCreatorでシューティングゲームを作る詳しい解説
  • CocosCreatorでクールなレーダーチャートを描く方法
  • CocosCreator MVCアーキテクチャの詳細な説明
  • CocosCreatorメッセージ配信メカニズムの詳細な説明
  • CocosCreator 入門チュートリアル: ネットワーク通信
  • CocosCreatorでWeChatゲームを作成する方法
  • CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明
  • CocosCreatorでゲームコントローラーを使用する方法
  • CocosCreator Huarongdaoデジタルパズルの詳しい説明
  • CocosCreatorゲームにおける魚群アルゴリズムの詳細な説明
  • CocosCreator最適化DrawCallの詳細な説明
  • CocosCreatorがスキル冷却効果を実装
  • Pythonはシンプルなソケット通信のサンプルコードを実装します
  • Python と Websocket を使用してリアルタイム ログ トラッカーを構築する手順
  • Javaはソケットを通じてシンプルな複数人チャットルームを実装する
  • CocosCreator で http と WebSocket を使用する方法

<<:  MySQL 5.7 インストール不要の設定グラフィックチュートリアル

>>:  実行中の Docker コンテナにボリュームを動的に追加する方法

推薦する

clearfixとclearの例

この記事では、CSS を理解し始めたばかりの人を対象に、主に HTML で clearfix と c...

JavaScript を使用してカルーセル効果を実装する

この記事では、カルーセルマップの特殊効果を実現するためのJavaScriptの具体的なコードを参考ま...

JavaScript プリミティブデータ型シンボルの詳細な説明

目次導入説明名前の競合私有財産要約する導入シンボル変数を作成する最も簡単な方法は、Symbol() ...

ウェブデザインのグラフィック構成と組版機能の紹介

すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...

Centos7でファイルをバックアップするときは、バックアップファイルにバックアップの日付を追加します

Linux は、システム内のデバイス、インターフェース、ファイル、スタートアップ、アプリケーション ...

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

Linux で pip 操作中にタイムアウトが発生する問題を解決する方法

Linuxインスタンスでpipを使用する際のタイムアウト問題を解決する方法pip は最も人気のある ...

MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明

目次1. はじめに2. MVCC (マルチバージョン同時実行制御メカニズム) 2.1 繰り返し読み取...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

Ubuntu 20.04 をインストールした後に行うべきこと (初心者向けガイド)

Ubuntu 20.04 がリリースされ、多くの新機能が導入されましたが、慣れていない機能も多くあ...

Linux コマンドラインのクイックヒント: ファイルの検索方法

私たちのコンピューターには、ディレクトリ、写真、ソース コードなどのファイルが保存されています。たく...

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

Dockerデータストレージのバインドマウントの詳細な説明

この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...

CSS3で蓮の花が咲くアニメーション効果を実現

まずは効果を見てみましょう:この効果は非常に華やかに見えますが、原理は複雑ではありません。1 枚の花...