因此,我最近发现了EaselJS(更常见的是CreateJS),并且我试图找到一种用它制作turbomedia(即this kind of thing)的方法。

目前,我正在研究可逆性。 Turbomedia通过一系列状态/框架来讲述其故事,其主要功能是可以随意在这些框架之间来回移动(通常是通过击键)。为了实现这种可逆性,我需要状态与先前的事件无关(即状态2必须从状态1或状态3到达都必须相同)。

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

我遇到的问题是双重的。

首先,我需要具有比较数组内容的能力,以便每当当前状态更改时,都会将新状态与前一个状态进行比较,并根据需要交换图像(即,从["sky1", "kid1"]更改为["sky2", "kid1"]会从阶段,添加sky2,并保留kid1(因为这两个州都存在)。这是为了保留跨状态的动画时间,并尝试使过渡更轻巧(尽管我不确定是否需要这样做?)。

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

第二个问题可能要简单得多,但是我缺乏使用Javascript的经验,老实说,我不知道自己在做什么错。我无法定位我的州的内容。这是我的init():

stage = new createjs.Stage("testing");
currentstate = 1;

terra1 = new createjs.Bitmap("terra1.png");
terra2 = new createjs.Bitmap("terra2.png");

bullet1 = new createjs.Bitmap("bullet1.png");
bullet2 = new createjs.Bitmap("bullet2.png");

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

calcstate = "state" + currentstate;
    // Call the first state (at least that's what I'm going for).
console.log(calcstate);
    // This returns "state1". I want it to return ["terra1"] since that's the
    //content of state1.
for (i = 0; i < calcstate.length; i++) {
    stage.addChild(calcstate[i]);
    // Currently useless since previous code doesn't work, but would be the
    // function to "create the first stage".
};

stage.update();


是的,到目前为止,我几乎陷入了困境。有什么建议吗?

最佳答案

您没有正确引用实例。


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


例:

this[calcState]
// OR, depending on your scope
window[calcState]



即使您正确地引用了状态数组,它们本身也只包含字符串,因此您将在舞台上添加“ terra1”,而不是实例terra1。您也可以在此处使用方括号访问,但是更好的方法是将实例实际添加到状态数组中:


例:

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


我建议使用console.log()来输出值calcState以及for循环中的calcstate[i],这应该使您更清楚地了解所看内容。

一种更简单的处理方法是制作一个包含子元素的状态数组:

states = [
    [terra1],
    [terra2, bullet1],
    [terra2, bullet2]
];

// Refer to your states. Note that calcState should be 0-2 and not 1-3
states[calcState][i];


希望能有所帮助。

09-25 22:11