CocosCreatorでスワイプした位置にテクスチャを表示する方法

CocosCreatorでスワイプした位置にテクスチャを表示する方法

1. プロジェクト要件

プロジェクトには、光点がパスを通過すると、パス上のすべての位置が点灯するという機能が必要です。

2. 文書の内容

この機能は、この偉大な神の消しゴム機能に似ています: https://forum.cocos.org/t/2-0-8/74246

ただし、プロジェクトの要件がたどるパスの周囲にはぼやけた境界があり、中心から端に向かって暗くなっています。

したがって、インターネット上のマスターから借用したシェーダーの例は次のようになります。

私はプロジェクトのニーズを満たすために、偉大な神の肩の上でいくつかの変更を加えました。

3. プロジェクト例

以下は私のテスト プロジェクトの例です。

(画質が悪いのは無視してください。画面録画ソフトをインストールするのが面倒なので)

4. プロジェクトコード

スライダーポイントライト.ts

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


@ccクラス

デフォルトクラス Follow_spot をエクスポートし、cc.Component を拡張します {

	@property(cc.Node)

	bg: cc.Node = null;

	マテリアル: cc.Material = null;

	中心: 数値[] = [0.5, 0.5];

	testArr: 数値[] = [];


	オンロード() {

		this.material = this.bg.getComponent(cc.Sprite).getMaterial(0);

		this.material.setProperty('wh_ratio', this.bg.width / this.bg.height);

		this.material.setProperty('center', this.center);


		// js で最も重要な文はこれです。パラメーターは配列の長さ * 配列内のベクトルの次元です。this.material.setProperty('colorArr', new Float32Array(400));

		//ここで設定する場合、配列内のベクトル成分を1次元配列に展開する必要があります this.material.setProperty('colorArr', []);


		this.bg.on(cc.Node.EventType.TOUCH_MOVE、this.touchMoveEvent、this);

	}


	タッチ移動イベント(evt: cc.Event.EventTouch) {

		this.center[0] = evt.getLocation().x / this.bg.width;

		this.center[1] = 1 - evt.getLocation().y / this.bg.height;

		コンソールにログ出力します。

		this.material.setProperty('center', this.center);

		(this.testArr.length >= 400) の場合 {

			this.testArr.shift();

			this.testArr.shift();

		}

		this.testArr.push(this.center[0]);

		this.testArr.push(this.center[1]);



		// js で最も重要な文はこれです。パラメーターは配列の長さ * 配列内のベクトルの次元です。this.material.setProperty('colorArr', new Float32Array(this.testArr));

		//ここで設定する場合、配列内のベクトル成分を 1 次元配列に拡張する必要があります this.material.setProperty('colorArr', this.testArr);

	}

}



スライダーポイントライト効果


CCE効果 % {

		テクニック:

			-パス:

			-vert: 対

		フラグ: fs

		ブレンド状態:

			ターゲット:

			-ブレンド: 真

		ラスタライザー状態:

			カリングモード: なし

		プロパティ:

			テクスチャ:
				値: 白
			}

		比率:

			値: 1.78、

			エディタ:

				ツールヒント: 「アスペクト比」

			}

		}

		ぼかし:

			値: 0.35、

			エディタ:

				ツールヒント: 「絞りぼかしレベル」

			}

		}

		半径:

			値: 0.5、

			エディタ:

				ツールチップ: 「開口半径」

			}

		}

		中心:

			値: [0.5, 0.5],

			エディタ:

				ツールヒント: 「絞り開始点」

			}

		}

		カラー配列: {
			値: [0.5, 0.5, 0.5, 0.5]
		}

	} %



	CCプログラム vs %

		高精度の高浮動小数点数。


		#include <cc-global>

		#include <cc-local>


		vec3 の a_position;

		vec4 では a_color;

		vec4 v_color を出力します。


		#USE_TEXTUREの場合

		vec2 では a_uv0 です。

		出力vec2 v_uv0;

		#終了


		void main() {

			vec4 pos = vec4(a_position, 1);


			#CC_USE_MODELの場合

			pos = cc_matViewProj * cc_matWorld * pos;

			#それ以外

			pos = cc_matViewProj * pos;

			#終了


			#USE_TEXTUREの場合

			uv0 は uv1 より小さい。

			#終了


			色は、v_color と a_color のどちらにも適用されます。


			gl_Position = pos;

		}

	} %


	CCプログラム fs % {


		高精度の高浮動小数点数。


		#include <アルファテスト>


		vec4 v_color の場合;


		#USE_TEXTUREの場合

		vec2 v_uv0 内;

		均一なサンプラー2Dテクスチャ。

		#終了


		均一なARGS

			フロート半径;

			フロートぼかし;

			vec2 中心;

			浮動小数点比率;

		};


		//エフェクト定義uniform Metaball {

			vec4カラーArr[100];

		};


		void main() {

			vec4 o = vec4(1, 1, 1, 0);

			o *= テクスチャ(テクスチャ、v_uv0);

			o * = v_color;

			float 円 = 半径 * 半径;

			(int i = 0; i < 100; i++) の場合 {

				浮動小数点数型カラーX = colorArr[i].x;

				浮動小数点数型カラーY = colorArr[i].y;

				フロートrx = colorX * wh_ratio;

				フロートry = colorY;

				浮動小数点数 = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);


				oa = スムーズステップ(円、円 - ぼかし、dis) + oa;

			}


			gl_FragColor = o;

		}

	}%

以上がCocosCreatorでスワイプした位置にテクスチャを表示する方法の詳細です。CocosCreatorの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。

以下もご興味があるかもしれません:
  • cocoscreatorプレハブの詳しい説明
  • CocosCreator でレイヤー管理に常駐ノードを使用する方法
  • ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法
  • CocosCreator ScrollView 最適化シリーズ: フレーム読み込み
  • CocosCreatorプロジェクト構造の仕組みの詳細な説明
  • CocosCreatorオブジェクトプールの使い方
  • CocosCreatorの共通知識ポイントを整理する
  • CocosCreatorのホットアップデートの包括的な説明
  • CocosCreator クラシック エントリー プロジェクト flappybird
  • CocosCreator ユニバーサルフレームワークデザインネットワーク
  • CocosCreatorを使ってシューティングゲームを作る方法
  • CocosCreatorでゲームコントローラーを使用する方法

<<:  Linux で MySQL 5.7.19 をアンインストールする方法

>>:  Dockerは公式Redisイメージをインストールし、パスワード認証を有効にします

推薦する

CSS3 とテーブルタグを使用して円軌道アニメーションを実装するためのサンプルコード

html: 実際には、テーブルタグに従っていくつかの実線の円 div を正六角形に配置し、div コ...

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

DockerにRabbitMQをインストールする詳細な手順

目次1. 鏡を見つける2. RabbitMQイメージをダウンロードする3. RabbitMQコンテナ...

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

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

HTML にオーディオファイルを挿入してブラウザで再生する場合の互換性の問題

HTML にオーディオ ファイルを挿入した後 (mp3 ファイルを再生した後) に発生したいくつかの...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...

JavaScriptプロトタイプと例の詳細な説明

目次コンストラクタインスタンスとプロトタイプの関係プロトタイププロパティ属性またはメンバーの検索原則...

MySQL 5.7.33 インストール プロセスの詳細な図解

目次インストールパッケージのダウンロードインストール環境変数の設定インストールが成功したか確認する記...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

MySQLサービスが起動しても接続されない問題の解決策

mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...

カルーセルバナーの自動回転効果を実現する純粋な CSS

さっそくコードを見てみましょう * { マージン: 0; パディング: 0; } 。容器 { マージ...

Linux で Scala 環境を構築し、簡単な Scala プログラムを書く

Linux に Scala 環境をインストールするのは非常に簡単です。Ubuntu 環境であれば、さ...

MYSQL は、指定されたユーザーのランキングとクエリを実装します。ランキング関数 (並列ランキング関数) のサンプルコード

序文この記事は主に、MYSQL でランキングを実現し、指定ユーザーランキング関数 (並列ランキング関...

MySQL チュートリアル データ定義言語 DDL の例 詳細な説明

目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...