所以,我最近发现了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"]
所以是的,现在我几乎陷入了困境。有什么建议吗?
答案 0 :(得分:0)
您没有正确引用这些实例。
calcState
将是一个字符串(例如“state1”),而不是对变量state1
的引用。您可以使用括号访问来引用它:示例:
this[calcState]
// OR, depending on your scope
window[calcState]
terra1
。您也可以在此处使用括号访问,但更好的方法是将实例实际添加到状态数组中:示例:
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];
希望有所帮助。