通过曝光片,EaselJS turbomedia可逆性

时间:2016-01-05 12:50:43

标签: javascript arrays createjs easeljs

所以,我最近发现了EaselJS(更常见的是CreateJS),我正在试图找出一种方法来制作turbomedia(即this kind of thing)。

目前,我正致力于可逆性。 turbomedia通过一系列状态/帧来讲述它的故事,一个关键特征是能够随意在这些帧之间来回移动(通常通过按键)。为了实现这种可逆性,我需要状态独立于先前的事件(即状态#2必须是相同的,无论它是从状态#1还是状态#3到达)。

直到最近,我只使用单个位图(这样每个状态将对应一个现有文件),因此问题永远不会出现。但是,现在我希望能够使状态成为由多个图像组成的组合(因为这可以提供更多的灵活性)。因此,状态可能由数组["sky3", "ground2", "character5"]描述,意思是“此状态包含存储在sky3,ground2和character5中的图像”。

我遇到的问题有两个。

首先,我需要能够比较数组内容,以便每当当前状态发生变化时,将新状态与前一状态进行比较,并根据需要交换图像(即从["sky1", "kid1"]到{{1将从舞台中删除sky1,添加sky2,并保持kid1,因为它存在于两个状态中)。这是为了保持各州的动画时序,并尝试使转换更轻(虽然我不确定是否需要?)。

但我不知道如何比较像这样的数组内容。

第二个问题可能更简单,但我缺乏Javascript经验,说实话,我不知道我做错了什么。我无法定位我的州的内容。这是我的init():

["sky2", "kid1"]

所以是的,现在我几乎陷入了困境。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您没有正确引用这些实例。

  1. 您的calcState将是一个字符串(例如“state1”),而不是对变量state1的引用。您可以使用括号访问来引用它:
  2. 示例:

    this[calcState]
    // OR, depending on your scope
    window[calcState]
    
    1. 即使您正确引用状态数组,它们本身也只包含字符串,因此您将向舞台添加“terra1”,而不是实例terra1。您也可以在此处使用括号访问,但更好的方法是将实例实际添加到状态数组中:
    2. 示例:

      state1 = [terra1];
      state2 = [terra2, bullet1];
      state3 = [terra2, bullet2];
      

      我建议您使用console.log()输出值calcState以及for循环中的calcstate[i],这样可以了解您所看到的内容。

      更简单的方法是创建一个states数组,它包含子元素:

      states = [
          [terra1],
          [terra2, bullet1],
          [terra2, bullet2]
      ];
      
      // Refer to your states. Note that calcState should be 0-2 and not 1-3
      states[calcState][i]; 
      

      希望有所帮助。