我刚开始在Adobe Flash中使用JSFL,我正在尝试将文本字段添加到新创建的图层,然后将其实例名称更改为“properties”。
这是我的代码:
fl.outputPanel.clear();
var document = fl.getDocumentDOM();
var timeline = document.getTimeline();
var layers = timeline.layers;
var propertiesLayer = null;
var propertiesTextBox = null;
var layerIndex = 0;
fl.trace("Searching For Properties Layer");
for (var index in layers)
{
if(layers[index].name == "properties")
{
propertiesLayer = layers[index];
layerIndex = index;
}
}
if(!propertiesLayer)
{
fl.trace("Creating Properties Layer");
timeline.addNewLayer("properties");
layerIndex = timeline.findLayerIndex("properties");
fl.trace("Properties Layer Index is " + layerIndex);
propertiesLayer = layers[layerIndex];
timeline.setSelectedLayers(layerIndex * 1);
fl.trace("Creating Properties Text Field");
document.addNewText({left:0, top:-100, right:100, bottom:0});
propertiesLayer.frames[0].elements[0].name = "properties";
fl.trace("Setting Properties Text Field's Instance Name");
//propertiesTextBox.name = "properties";
fl.trace("Setting Properties Text Field");
document.setTextString("test");
}
我的输出窗口显示: 搜索属性层 创建属性层 属性层索引为0 创建属性文本字段
在测试新的Flash文档时出现以下错误 TypeError:propertiesLayer.frames [0] .elements [0]没有属性
我很茫然,任何帮助都会非常感激。
答案 0 :(得分:1)
修改了你的代码并且它有效。以下是我修改代码的部分。但是需要一些改进。
if(!propertiesLayer)
{
timeline.addNewLayer("properties");
layerIndex = timeline.findLayerIndex("properties");
propertiesLayer = layers[layerIndex];
timeline.setSelectedLayers(0);
document.addNewText({left:0, top:-100, right:100, bottom:0});
document.setTextString("test");
var element = document.selection[0];
document.selection[0].textType = "dynamic";
element.name = "properties";
}
答案 1 :(得分:0)
调用addNewText()时,创建的文本字段类型是最后创建的类型。因此,如果您创建了一个静态字段,那么运行您的代码会因为您看到错误输出,因为静态文本字段不能包含实例名称(使用“name”属性设置)。以下是您的问题的快速解决方法:
propertiesLayer.frames[0].elements[0].textType = "dynamic";
propertiesLayer.frames[0].elements[0].name = "properties";
希望有所帮助!