1

当添加到时间线的第一帧时,我有一个用于多语言使用的脚本。但是,当我尝试将其调整为在外部 .as 脚本中工作时,它会引发 TypeError,我不知道为什么。

这是在时间轴中工作的代码:

import fl.data.DataProvider;
import fl.text.TLFTextField;
import flash.text.Font;
import flashx.textLayout.elements.*;
import flashx.textLayout.formats.*;

//------------------
// CREATE TLFTEXTFIELD:

var field_001:TLFTextField = new TLFTextField();
field_001.x = 20;
field_001.y = 50;
field_001.width = 342
field_001.height = 54;
field_001.background = true;
addChild(field_001); 

// Create text format
var format:TextLayoutFormat = new TextLayoutFormat();
format.fontFamily = "Arial";
format.fontSize = 36;
format.color = 0x666666;

// Apply the format
var textFlow:TextFlow = field_001.textFlow;
textFlow.hostFormat = format;

//------------------
// SETUP LOCALE OBJECT:

var languages:Object = new Object();    // Stores flags for loaded languages
var localeDefault:String = "ar";        // Default language
var locale:String = "ar";              // Current language selected in combobox

// Event handler for Locale object
function localeLoadedHandler(success:Boolean):void 
{
    if( success )
{
        // Mark language as loaded and show localized string
        languages[locale] = true;
        field_001.text = Locale.loadStringEx("IDS_FIRSTFIELD", locale);
                // field_002 is a field already on stage
        field_002.text = Locale.loadStringEx("IDS_SECONDFIELD", locale);
    }
}    
// Load the default language...
Locale.setDefaultLang(localeDefault);
Locale.setLoadCallback(localeLoadedHandler);
trace("Locale.getDefaultLang() is: " + Locale.getDefaultLang());
Locale.loadLanguageXML(Locale.getDefaultLang());

这是我对外部脚本的改编,并设置为名为“tempchild.swf”的独立 swf 的类,我想稍后在父 swf 中打开:

package com.marsinc {

import fl.text.TLFTextField;
import flash.text.Font;
import flashx.textLayout.elements.*;
import flashx.textLayout.formats.*;
import flash.display.MovieClip;
import fl.lang.Locale;

public class tempchild extends MovieClip {

    //------------------
    // SETUP LOCALE OBJECT:

    private var languages:Object;           // Stores flags for loaded languages
    private var localeDefault:String;       // Default language
    private var locale:String;          // Current language selected in combobox
    private var field_001:TLFTextField;
    private var format:TextLayoutFormat;

    public function tempchild() 
    {
        // constructor code
        languages = new Object();
        localeDefault = "es";   
        locale = "es";

        //------------------
        // CREATE TLFTEXTFIELD:

        field_001 = new TLFTextField();
        field_001.x = 20;
        field_001.y = 50;
        field_001.width = 342
        field_001.height = 54;
        field_001.background = true;
        addChild(field_001); 

        // Create text format
        format = new TextLayoutFormat();
        format.fontFamily = "Arial";
        format.fontSize = 36;
        format.color = 0x666666;

        // Apply the format
        var textFlow:TextFlow = field_001.textFlow;
        textFlow.hostFormat = format;

        // Load the default language...
        Locale.setDefaultLang(localeDefault);
        Locale.setLoadCallback(localeLoadedHandler);
        trace("Locale.getDefaultLang() is: " + Locale.getDefaultLang()); // displays "es"
        Locale.loadLanguageXML(Locale.getDefaultLang()); // this line returns an error
    }


    // Event handler for Locale object
    private function localeLoadedHandler(success:Boolean):void 
    {

        trace("running the loaded handler");
        if( success )
        {
            // Mark language as loaded and show localized string
            languages[locale] = true;
            field_001.text = Locale.loadStringEx("IDS_FIRSTFIELD", locale);
            //field_002.text = Locale.loadStringEx("IDS_SECONDFIELD", locale);
        }
    }    


}

这是输出窗口中的错误:

TypeError:错误#1010:术语未定义且没有属性。

在 fl.lang::Locale$/loadXML()

在 fl.lang::Locale$/loadLanguageXML()

在 com.marsinc::tempchild()

几天来一直在寻找答案,但我被困住了。任何帮助是极大的赞赏。谢谢!

——凯文

4

1 回答 1

0

您可以通过(至少)两种方式之一将其制作为 .as 文件

1) 完全按照原样复制粘贴到 .as 文件并执行以下操作:

include "[path]filename.as"

2) 将代码更改为一个类
- 将 field_001、格式、textFlow、语言、localeDefault、locale 设置为公共变量
- 将所有代码插入名为“init”的函数中
- 添加“localeLoadedHandler”作为函数
- 单击您的舞台并在属性面板中将舞台的类更改为新类

祝你好运!!

于 2013-10-21T07:13:28.137 回答