JavaScript - как сделать три цикла в студии Spark AR - PullRequest
0 голосов
/ 13 декабря 2018

Изменить для ясности:

Контекст этого вопроса не находится в контексте javascript / html.Это в контексте JavaScript студии Spark AR.Типичные методы html / css / javascript не работают.У меня есть только опыт работы с javascript через это приложение, и я впервые узнал что-либо вообщеЯ включил то, что работало для меня ниже.


У меня есть три актива в мобильном приложении, которые нужно переключать при нажатии, чтобы каждое нажатие переключало видимость текущего элемента и переключало видимость следующего.Я могу контролировать нажатия и подписаться на это событие.Я могу сделать активы *.hidden = true или false, но я не уверен в логике, необходимой для их обмена.

Могу ли я создать функцию подсчета для нажатий (ограничено тремя?), А затем использовать if / then в зависимости от числа, сгенерированного, чтобы скрыть / показать?

Я действительно только раньше писал сценарии вPython и некоторые js, но я «любопытный код» Какие соглашения я бы использовал в JavaScript для такой головоломки?Как может выглядеть успех?

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Просто на голову, что я наконец понял, как сделать то, что мне нужно было сделать, и это выглядит так:

const TouchGestures = require('TouchGestures');
const Scene = require('Scene');
const D = require('Diagnostics');

//scene assets:
const asset1 = Scene.root.find('plane0');
const asset2 = Scene.root.find('plane1');
const asset3 = Scene.root.find('plane2');
//assets put into array:
const myArray = [asset1,asset2,asset3];
//initial visibility state for assets:
var hideStates = [0,1,1];
//set initial visibility:
hide(myArray,hideStates);



//MAIN EVENT___________________________________________________________________________________
TouchGestures.onTap().subscribe(function (gesture) { // cycle visibility for assets on event

    var hideStates = [1,1,1];
    hide(myArray,hideStates);
    unHide(myArray);

});

//_____________________________________________________________________________________________

//this will move through an array one step at a time, returning the index...
var cycler = {
    current: -1,
    cycle: function(arr) {
        if (this.current == arr.length -1) {
            this.current = 0;
        } else {
            this.current++;
        }
        return this.current;
    }
};


function hide(assets,states) {
    for (var i = 0; i <assets.length; i++) {
        assets[i].hidden = states[i];
    }
};

function unHide(assets) {
    var unhide = cycler.cycle(myArray);
    myArray[unhide].hidden = 0;
};

Не уверен, что это лучший способ сделать что-то, но это работает!

0 голосов
/ 13 декабря 2018

Вот пример того, как использовать Javascript для выбора набора ресурсов (в данном случае, input элементов), показывая только один актив за раз:

var ix = 0;

var assets = ["x1","x2","x3"].map(
  function(x) {return document.getElementById(x);}
);

function showNextAsset() {
  assets[ix++].style.display = "none";
  assets[ix = (ix < assets.length) ? ix : 0].style.display = "block";
}
<form onclick="showNextAsset(); return false;">

<input id="x1" value="foo">
<input id="x2" value="bar" style="display:none">
<input id="x3" value="toto" style="display:none">

</form>
...