我第一次打破杂草,试图找出CreateJS中正确的框架调用,并且我很难搁浅Flash CC似乎没有将实例名称应用于导出到HTML5 Canvas时的名称字段。有一个简单的方法吗?
我的意思是,对于HTML5 Canvas文档
console.log( this.myItemInstanceName.name )
返回null,而AS3文档中的类似代码
trace( this.myItemInstanceName.name )
返回字符串“myItemInstanceName”。
我做了很多飞机面板,通常由一个带有一系列开关,拨盘或btn控制器的面板组成。我有一个函数库,允许我执行每个控件的行为,然后它使用基于控件名称的switch语句调用panelUpdates函数。这让我可以做一些事情,比如在开关打开的情况下点亮面板上的灯。
我可以轻松设置控件,但由于名称的这种愚蠢,我无法按照自己喜欢的方式看到连接panelUpdates函数的方法。任何人都有一个很好的方法来填充正确的实例名称或知道什么时候Adobe会将它添加到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;
}
}
答案 0 :(得分: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 === ...) {
...
}
}
答案 1 :(得分:0)
我也遇到了同样的问题而且很烦人。 但我通过手动设置名称然后使用它来解决。
例如:
this.myItemInstanceName.name = "myItem";
if (this.myItemInstanceName.name == "myItem")
现在我知道我可以直接与上面提到的对象进行比较。 :)