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イメージをインストールし、パスワード認証を有効にします

推薦する

ウェブページのテキストデザインは、服を着た賢い女の子のようであるべきだ

<br />「この世に醜い女性はいない、あるのは怠惰な女性だけだ」これは女性の美のバイブ...

Linuxシステムにおける仮想デバイスファイルのさまざまな実用的な使用法の詳細な説明

みなさんこんにちは。私は梁旭です。ご存知のとおり、Linux ではデバイス ファイルも含めすべてがフ...

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

サイトマップをウェブページの下部に配置するメリットと例

以前は、ほとんどすべての Web サイトに、すべてのページをリストしたサイトマップ ページがありまし...

DockerをインストールしてAlibaba Cloud Image Acceleratorを構成する方法

DockerのインストールDocker はオープンソースなので、Windows システムへのインスト...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)

上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject...

IE6 で JS エラーが発生し、CSS が適用されない HTML エンコードの問題の解決策

テストでは、ページ定義がutf-8でエンコードされている場合、 js ファイルに中国語などのマルチバ...

JavaScript データ型の詳細な説明

目次1. リテラル1.1 数値リテラル1.2 浮動小数点リテラル1.3 特別な値1.4 文字列リテラ...

Vue.js ディレクティブのカスタム命令の詳細な説明

デモコマンドをカスタマイズするVue カスタム ディレクティブの構文は次のとおりです。 Vue.di...

MySQL ステートメントを使用して、さまざまな整数が占めるバイト数とその最大値と最小値を調べる例

直接コード: タイプとして「bigint unsigned」、バイトとして「8」、max_numとし...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

JS の compose 関数と pipe 関数の使い方の詳細な説明

目次作成機能配列プロトタイプの削減Array.prototype.reduceRightパイプ関数作...

VMWare 仮想マシン 15.X LAN ネットワーク構成チュートリアル図

最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...

meta name="" content="の機能の詳細な説明

1. 文法: <meta name="名前" content="...

MySQL ファジークエリの使用法 (通常、ワイルドカード、組み込み関数)

目次1. MySQL ワイルドカード ファジー クエリ (%,_) 1-1. ワイルドカードの分類1...