Javascript:存储最后一个值并在下次调用时增加1

Javascript:存储最后一个值并在下次调用时增加1,javascript,Javascript,我有一个内置于Hype 3的动画。我有多个场景,在每个场景的结尾,我有一个函数叫做。此函数具有一个场景名称数组,用于基于该数组导航到下一个场景。在第一次导航时,我已经完成了这项工作,但是,我不确定下一次调用函数时如何转到数组中的下一项 正如你在下面看到的,我有一个由两个项目组成的数组。调用该函数时,它将导航到第一个项目County1。下次调用该函数时,它应该导航到County3 在动画结束时,我需要运行一个函数来重置位置,因为它将连续循环 当前功能: function nextScene() {

我有一个内置于Hype 3的动画。我有多个场景,在每个场景的结尾,我有一个函数叫做。此函数具有一个场景名称数组,用于基于该数组导航到下一个场景。在第一次导航时,我已经完成了这项工作,但是,我不确定下一次调用函数时如何转到数组中的下一项

正如你在下面看到的,我有一个由两个项目组成的数组。调用该函数时,它将导航到第一个项目
County1
。下次调用该函数时,它应该导航到
County3

在动画结束时,我需要运行一个函数来重置位置,因为它将连续循环

当前功能:

function nextScene() {
     var activeCounties = ['County1', 'County3'];
     hypeDocument.showSceneNamed(activeCounties[0]);
     console.log(activeCounties[0]);
}

使用全局递增变量(
i
)指定数组中要指向的索引。然后每次调用函数时,递增此计数器

这里我还包括了
%activecountries.length
,以便在显示所有场景后将场景计数恢复为零(允许您连续循环):

var i=0;
函数nextScene(){
var activecountries=['County1','County3'];
//hypeDocument.ShowSceneName(活跃县[0]);
console.log(activecountries[i]);
i=(i+1)%1.length;
}
nextScene();
nextScene();
//如果达到所有场景,则模数将使我们返回到零:

nextScene()
我们可以创建一个具有自己作用域的函数,并在该作用域中添加属性
索引
,以跟踪应该操作的场景

试试这个

var nextScene=(函数(){
var指数=0;
返回函数(){
var activecountries=['County1','County3'];
//hypeDocument.showSceneNamed(活动县[索引]);
log(activecountries[index]);
//index++//管理索引的最简单方法
index=index+1===activecountries.length?0:index+1//圈。如果索引大于activecountries.length,则比index=0
}
})();
nextScene()//County1
nextScene()//County3

nextScene()//County1
对我来说,这听起来几乎像是对的定义。基本上,这是唯一一种类似于“暂停”函数执行并稍后恢复的方法。因此,无需使用另一个作用域中的变量(如通俗地称为
i
)即可执行以下操作:

function* nextScene() {
  var activeCounties = ['County1', 'County3'];
  //hypeDocument.showSceneNamed(activeCounties[0]);
  var index = 0;
  while (true) {
    yield activeCounties[index];
    index++;
    if (index == activeCounties.length) {
      index = 0;
    }
  }
}

generateScene = nextScene();

console.log(generateScene.next().value);
console.log(generateScene.next().value);
console.log(generateScene.next().value);
console.log(generateScene.next().value);
console.log(generateScene.next().value);
你可以看到一个演示。注意
函数
关键字后的星号。你也可以阅读更多关于它的内容


还有一个我喜欢的视频,可以在一个简单的游戏中解释这一点。

为了与众不同,我想我会向您展示如何使用一个我们称之为
场景管理器的类来管理它

类场景管理器{
构造函数(){
this.activeCountries=['County1','County3'];
该指数=0;
}
nextScene(){
让activeCountry=this.activeCountries[this.index];
this.index=(this.index+1)%this.activeCountries.length;
返回祖国;
}
}
const sm=新场景管理器();
//hypeDocument.ShowSceneName(sm.nextScene())
console.log(sm.nextScene())//County1
console.log(sm.nextScene())//County3

console.log(sm.nextScene())//County1
您需要在函数外部存储一个变量,以保持当前数组索引并使用该索引引用场景,例如
hypeDocument.showSceneNamed(ActiveCountries[idx++])
其中,
idx
是变量,
++
将使值增加1。这在hype之外有效,但由于各种限制,在hype内无效。是否可以在没有返回功能的情况下执行此操作?不幸的是,这在hype 3中似乎不起作用。