Code Snippets 047 Inhalt Überprüft, ob ein Sprite Objekt mit der Maus angeklickt wurde: async mySleep() Methode: Audio Dateien abspielen mit dem AudioManager.js Tick und Onbeforelayoutstart Funktionen für jedes Layout: Construct 3 Scripting Übersicht Construct 3 Forum Object Class: getFirstPickedInstance() Return the first instance that has been picked by the event’s conditions, or null if none. This is only useful with scripts in event sheets. const tempWall = runtime.objects.wall.getFirstPickedInstance(); tempWall.destroy(); Dokumentation: OBJECT CLASS SCRIPT INTERFACE Behavior: Tween const tempSprite = runtime.objects.piggy.getFirstInstance(); tempSprite.behaviors.Tween.startTween("angle", tempSprite.angle - ((90 * Math.PI)/180) , 0.3, "linear"); const tempSprites = runtime.objects.piggy.getAllInstances(); tempSprites.forEach((sprite)=>{ sprite.behaviors.Tween.startTween("angle", tempSprite.angle - ((90 * Math.PI)/180) , 0.3, "linear"); }); Dokumentation: TWEEN BEHAVIOR SCRIPT INTERFACE Überprüft, ob ein Sprite Objekt mit der Maus angeklickt wurde async function OnBeforeProjectStart(runtime) { runtime.addEventListener("mousedown", e => OnMouseDown(e, runtime)); runtime.addEventListener("tick", () => Tick(runtime)); } function OnMouseDown(e, runtime){ // get the actual layout with first layer const currentLayer = runtime.layout.getLayer(0); const mouseXYAr = currentLayer.cssPxToLayer(e.clientX, e.clientY, 0); const sprites = runtime.objects.sprites.getAllInstances(); // loops through all sprites for(var i = 0; i < sprites.length; i++) { // checks if sprite contains mouse x,y point if(sprites[i].containsPoint(mouseXYAr[0], mouseXYAr[1])){ console.log("spirte clicked"); } } } Informationen zur Layer-Methode: cssPxToLayer(e.clientX, e.clientY, 0) Beispiel Construct 3 Datei Construct 3 Forum Post async mySleep() Methode let g_active = true; runOnStartup(async runtime => { runtime.addEventListener("beforeprojectstart", () => OnBeforeProjectStart(runtime)); }); async function OnBeforeProjectStart(runtime) { runtime.addEventListener("tick", () => Tick(runtime)); } function Tick(runtime) { if(g_active) demoFunction(); } function mySleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function demoFunction() { g_active = false; console.log('start'); await mySleep(2000); console.log('two seconds later'); await mySleep(2000); console.log('four seconds later'); await mySleep(2000); g_active = true; } Die Methode mySleep() kann in jeder „async“ Funktion aufgerufen werden und stoppt diese Funktion so lange, bis die übergebene Zeit in Millisekunden abgelaufen ist. Construct 3 Forum Post Audio Dateien abspielen mit dem AudioManager.js Zuerst muss man dem Projekt die Javascript Datei „AudioManager.js“ hinzufügen. // globale Variablen: // sound files let g_audioManager = null; let g_audioAttack1 = null; async function OnBeforeProjectStart(runtime) { g_LoadSounds(runtime); } async function g_LoadSounds(runtime){ g_audioManager = new AudioManager(runtime); [g_audioAttack1] = await Promise.all([ g_audioManager.loadSound("attack1.webm") ]); } Alle Audio Dateien in Consctruct 3 benötigen die Dateiendung „.webm“, welche autoamtisch erzeugt wird, wenn man eine Audio File importiert. Dazu klickt man mit der rechten Maustaste auf den „Sounds“-Ordner und wählt „Import Sounds“ aus. Tick und Onbeforelayoutstart Funktionen für jedes Layout let g_currentLayout = "Layout 1"; runOnStartup(async runtime => { runtime.addEventListener("beforeprojectstart", () => OnBeforeProjectStart(runtime)); }); async function OnBeforeProjectStart(runtime) { runtime.getLayout("Layout 1").addEventListener("beforelayoutstart", () => onBeforeLayoutStart_Layout1(runtime)); runtime.getLayout("Layout 2").addEventListener("beforelayoutstart", () => onBeforeLayoutStart_Layout2(runtime)); runtime.addEventListener("tick", () => Tick(runtime)); } function Tick(runtime) { if(g_currentLayout == "Layout 1")Tick_layout1(runtime); else if(g_currentLayout == "Layout 2")Tick_layout2(runtime); } // die Funktionen Tick_layout1 und onBeforeLayoutStart_Layout1 sind in eigenen .js Dateien: function onBeforeLayoutStart_Layout1(runtime){ } function Tick_layout1(runtime){ } Forum Post: I WANT TO HAVE A TICK AND ONBEFORELAYOUTSTART ON EVERY JS PAGE. Layout API Links … unsere-schule.org × Code Snippets Code: 047 Infos: unsere-schule Codes