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 コンテナにボリュームを動的に追加する方法

推薦する

CocosCreator ScrollView 最適化シリーズ: フレーム読み込み

目次1. はじめに2. 行き詰まった問題の分析3. 解決策(理論) 4. ソリューション(コード) ...

インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...

Vue3.0 異なる解像度のコンピュータの適応操作

まず依存関係をインストールする必要があります npm i lib-flexible-computer...

SQL Server データベース エラー 5123 の解決方法

なぜなら、SQL Server 2005 に基づくデータベース チュートリアルがあり、そこで使用され...

CSS導入方法4つのまとめ(共有)

1. インライン参照:ラベルに直接使用されるが、メンテナンスコストが高い スタイル='フォ...

MySQLクエリが遅い理由

目次1. 遅いところはどこですか? 2. 不要なデータをクエリしましたか? 1. 不要なレコードをク...

HTML でさまざまなスペースの特徴と表現を探る (推奨)

I. 概要HTML テンプレートを作成するときに、テキスト レイアウトの手段としてスペースが使用さ...

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

MySQLの関連ロックについての簡単な理解

この記事は主にInnoDBのロックに関する知識を素早く理解してもらうことを目的としています。 Roc...

JSコードコンパイラMonacoの使い方

序文私が必要としているのは、構文の強調表示、関数プロンプト、自動行折り返し、およびコードの折りたたみ...

MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します

目次frm ファイルと ibd ファイルの紹介frm ファイル回復テーブル構造ibd ファイル回復テ...

Nest.js パラメータ検証とカスタム戻りデータ形式の詳細な説明

0x0 パラメータ検証Nest.jsでは、パラメータ検証業務のほとんどをパイプライン方式で実装してい...

MySQLはtruncateコマンドを使用してデータベース内のすべてのテーブルを素早くクリアします

1. まずSELECT文を実行して、すべての切り捨て文を生成します。ステートメント形式: selec...

MySQLにデータを素早くインポートする方法

序文:日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、デ...

XHTML: フレーム構造タグ

フレーム構造タグ <frameset></frameset>フレームを使用す...