So zeigen Sie in CocosCreator eine Textur an der Wischposition an

So zeigen Sie in CocosCreator eine Textur an der Wischposition an

1. Projektanforderungen

Das Projekt muss eine Funktion haben: Wenn ein Lichtpunkt einen Pfad durchquert, leuchten alle Positionen auf dem Pfad auf.

2. Dokumentinhalt

Die Funktion ähnelt der Radiergummifunktion dieses großen Gottes: https://forum.cocos.org/t/2-0-8/74246

Der Weg, den die Projektanforderungen nehmen, ist allerdings von unscharfen Rändern umgeben – er wird von der Mitte zum Rand hin dunkler.

Also, Shader-Beispiele, die von den Meistern aus dem Internet übernommen wurden, ähneln den folgenden Beispielen:

Ich habe einige Änderungen an den Schultern des großen Gottes vorgenommen, um den Anforderungen des Projekts gerecht zu werden.

3. Projektbeispiele

Hier ist ein Beispiel aus meinem eigenen Testprojekt:

(Bitte ignorieren Sie die schlechte Bildqualität, ich bin zu faul, eine Bildschirmaufzeichnungssoftware zu installieren)

4. Projektcode

SliderPointLight.ts

Konstante {
	cc-Klasse,
	Eigentum
} = cc._Dekorateur;


@ccklasse

exportiere Standardklasse Follow_spot erweitert cc.Component {

	@Eigenschaft(cc.Node)

	bg: cc.Node = null;

	Material: cc.Material = null;

	Mitte: Zahl[] = [0,5, 0,5];

	testArr: Zahl[] = [];


	beim Laden() {

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

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

		dieses.material.setProperty('mitte', dieses.mitte);


		//Der wichtigste Satz in js ist dieser, wobei der Parameter die Array-Länge * die Dimension des Vektors im Array ist this.material.setProperty('colorArr', new Float32Array(400));

		//Wenn Sie hier Einstellungen vornehmen, müssen Sie die Vektorkomponenten im Array in ein eindimensionales Array erweitern. this.material.setProperty('colorArr', []);


		dies.bg.on(cc.Node.EventType.TOUCH_MOVE, dies.touchMoveEvent, dies);

	}


	touchMoveEvent(evt: cc.Event.EventTouch) {

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

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

		Konsole.log(dieses.Center);

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

		wenn (this.testArr.length >= 400) {

			dies.testArr.shift();

			dies.testArr.shift();

		}

		dies.testArr.push(dieses.center[0]);

		dies.testArr.push(dieses.center[1]);



		//Der wichtigste Satz in js ist dieser, wobei der Parameter die Array-Länge * die Dimension des Vektors im Array ist this.material.setProperty('colorArr', new Float32Array(this.testArr));

		//Wenn Sie hier Einstellungen vornehmen, müssen Sie die Vektorkomponenten im Array in ein eindimensionales Array erweitern this.material.setProperty('colorArr', this.testArr);

	}

}



SliderPointLight.Effekt


CCEeffekt % {

		Techniken:

			-Pässe:

			-vert: vs

		frag: fs

		Mischungszustand:

			Ziele:

			-blend: wahr

		rasterizerState:

			cullMode: keiner

		Eigenschaften:

			Textur:
				Wert: weiß
			}

		wh_verhältnis:

			Wert: 1,78,

			Editor:

				Tooltip: „Seitenverhältnis“

			}

		}

		verwischen:

			Wert: 0,35,

			Editor:

				Tooltip: „Blendenunschärfestufe“

			}

		}

		Radius:

			Wert: 0,5,

			Editor:

				Tooltip: „Blendenradius“

			}

		}

		Center:

			Wert: [0,5, 0,5],

			Editor:

				Tooltip: „Blendenstartpunkt“

			}

		}

		FarbeArr: {
			Wert: [0,5, 0,5, 0,5, 0,5]
		}

	} %



	CCProgram vs. %

		Präzisions-Hochleistungsschwimmer;


		#einschließen <cc-global>

		#einschließen <cc-local>


		in vec3 a_position;

		in vec4 a_color;

		ausgegebenes vec4 v_color;


		#wenn USE_TEXTURE

		im Vektor 2 a_uv0;

		ausgegebener vec2 v_uv0;

		#endif


		void main() {

			vec4 pos = vec4(a_position, 1);


			#wenn CC_USE_MODEL

			pos = cc_matViewProj * cc_matWorld * pos;

			#anders

			pos = cc_matViewProj * pos;

			#endif


			#wenn USE_TEXTURE

			a_uv0;

			#endif


			v_Farbe = eine_Farbe;


			gl_Position = pos;

		}

	} %


	CCProgramm fs % {


		Präzisions-Hochleistungsschwimmer;


		#include <Alphatest>


		in vec4 v_color;


		#wenn USE_TEXTURE

		im Vektor 2 v_uv0;

		einheitliche Sampler2D-Textur;

		#endif


		einheitliches ARGS

			Schwimmradius;

			schwebende Unschärfe;

			vec2 Mitte;

			Gleitkommazahl wh_verhältnis;

		};


		//Effektdefinition einheitlicher Metaball {

			vec4 FarbeArr[100];

		};


		void main() {

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

			o *= Textur(Textur, v_uv0);

			o *= v_Farbe;

			Gleitkommakreis = Radius * Radius;

			für (int i = 0; i < 100; i++) {

				float FarbeX = FarbeArr[i].x;

				FarbeY = FarbeArr[i].y;

				float rx = FarbeX * wh_verhältnis;

				float ry = FarbeY;

				float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry);


				oa = Smoothstep(Kreis, Kreis - Unschärfe, Unschärfe) + oa;

			}


			gl_FragColor = o;

		}

	}%

Oben finden Sie Einzelheiten dazu, wie CocosCreator die Textur an der Stelle anzeigen kann, an der Sie wischen. Weitere Informationen zu CocosCreator finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des Cocoscreater-Prefabs
  • So verwenden Sie residente Knoten für die Ebenenverwaltung in CocosCreator
  • So verwenden Sie CocosCreator zur Tonverarbeitung bei der Spieleentwicklung
  • CocosCreator ScrollView-Optimierungsreihe: Frame-Laden
  • Detaillierte Erläuterung des CocosCreator-Projektstrukturmechanismus
  • So verwenden Sie den CocosCreator-Objektpool
  • Organisieren Sie die allgemeinen Wissenspunkte von CocosCreator
  • Umfassende Erklärung zum CocosCreator Hot Update
  • CocosCreator klassisches Einstiegsprojekt flappybird
  • CocosCreator Universal Framework Design Network
  • So verwenden Sie CocosCreator zum Erstellen eines Schießspiels
  • So verwenden Sie einen Gamecontroller in CocosCreator

<<:  So deinstallieren Sie MySQL 5.7.19 unter Linux

>>:  Docker installiert das offizielle Redis-Image und ermöglicht die Kennwortauthentifizierung

Artikel empfehlen

Natives JS zur Implementierung des Spiels 2048

2048 Minispiel, zu Ihrer Information, der spezifi...

JavaScript fügt Prototyp-Methodenimplementierung für integrierte Objekte hinzu

Die Reihenfolge, in der Objekte Methoden aufrufen...

Detaillierte Erläuterung des auf Python basierenden MySQL-Replikationstools

Inhaltsverzeichnis 1. Einleitung Zweites Training...

Asynchrone Programmierung in Javascript: Verstehen Sie Promise wirklich?

Inhaltsverzeichnis Vorwort Grundlegende Verwendun...

Hinweise zum Systemaufruf des Linux-Kernel-Gerätetreibers

/**************************** * Systemaufruf*****...

Der Unterschied zwischen VOLUME und docker -v in Dockerfile

Es gibt offensichtliche Unterschiede zwischen der...

So installieren Sie Oracle auf Windows Server 2016

1. Installieren Sie Oracle. Im Internet gibt es z...

Lassen Sie uns über Destrukturierung in JS ES6 sprechen

Überblick es6 fügt eine neue Möglichkeit hinzu, b...

Implementierung der MVCC-Mehrversions-Parallelitätskontrolle von MySQL

1 Was ist MVCC Der vollständige Name von MVCC lau...

jQuery implementiert die Drop-Down-Box zur Auswahl des Wohnortes

Der spezifische Code für die Verwendung von jQuer...

Einführung in Docker-Container

1. Übersicht 1.1 Grundlegende Konzepte: Docker is...

Lösungen für Dateien/Ordner, die unter Linux nicht gelöscht werden können

Vorwort Kürzlich wurde unser Server von Hackern a...

Detaillierte Schritte zur Verwendung von AES.js in Vue

Verwendung der AES-Verschlüsselung Verschlüsselun...