1

我第一次在杂草中挣扎,试图在 CreateJS 中找出正确的框架调用,但由于 Flash CC 似乎没有将实例名称应用于名称字段这一事实,我已经陷入困境它导出到 HTML5 Canvas。是否有捷径可寻?

我的意思是,对于 HTML5 Canvas 文档

console.log( this.myItemInstanceName.name )

返回 null,而 AS3 文档中的类似代码

trace( this.myItemInstanceName.name )

返回字符串“myItemInstanceName”。

我做了很多飞机面板,它们通常由一个面板组成,上面有一堆开关、拨号或 btn 类型的控件。我有一个函数库,允许我执行每个控件的行为,然后它使用基于控件名称的 switch 语句调用 panelUpdates 函数。这让我可以做一些事情,比如在打开开关时点亮面板上的灯。

我可以轻松地设置控件,但我看不到以我想要的方式连接到 panelUpdates 函数的方法,因为名称很愚蠢。任何人都有一个很好的方法来填充正确的实例名称,或者知道 Adob​​e 何时将其添加到 Flash CC 更新中?

提前致谢,

埃里克。

示例代码:

var myPanel = this;

myPanel.mcLightSwitch.btnUp.addEventListener( "click", switchUp.bind( this ) ); // as per code snippets
myPanel.mcLightSwitch.btnDn.addEventListener( "click", switchDn.bind( this ) ); // as per code snippets

function switchUp( e ) {
     thisControl = e.target.parent;
     thisControl.gotoAndStop("btnUp");
     panelUpdates( e );
}

function switchDn( e ) {
     thisControl = e.target.parent;
     thisControl.gotoAndStop("btnDn");
     panelUpdates( e );
}

function panelUpdates( e ) {
     switch( e.target.parent.name ) {
          /* NOT WORKING BECAUSE ALL NAMES ARE NULL BY DEFAULT APPARENTLY */
          case "mcLightSwitch":
               if( e.target.name == "btnUp" ) {
                   myPanel.mcFuelLamp.gotoAndStop( "lit" );
               } else {
                   myPanel.mcFuelLamp.gotoAndStop( "unlit" );
               }
          break;
          default:
          break;
     }
}
4

2 回答 2

0

通过字符串比较来区分这些大小写似乎不必要地容易出错。像这样的东西怎么样:

function panelUpdates(e) {
    if (e.target.parent === myPanel.mcLightSwitch) {
        if (e.target === myPanel.mcLightSwitch.btnUp) {
            myPanel.mcFuelLamp.gotoAndStop("lit");
        }
        else {
            ...
        }
    }
    else if (e.target.parent === ...) {
        ...
    }
}
于 2014-05-07T10:32:38.447 回答
0

我也面临同样的问题,这很烦人。但是我通过手动设置名称然后使用它来解决问题。

例如:

this.myItemInstanceName.name = "myItem";
if (this.myItemInstanceName.name == "myItem")

现在我知道我可以直接与上面提到的对象进行比较。:)

于 2015-07-28T13:12:33.223 回答