AS3 ввод текста акценты - PullRequest
2 голосов
/ 26 июня 2011

Я создаю AS3 TextField, установленный в режим ввода динамически с помощью кода, но когда пользователь пытается ввести некоторые специальные символы (например, á é é è í ì ó ò ú ù ç), они просто не появляются в TextInput.

Копирование и вставка их в текстовое поле работает, но я бы предпочел, чтобы пользователь мог набирать их напрямую.

Вот быстрый тест, демонстрирующий это:

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldType;

    public class TextInput extends Sprite
    {
        public function TextInput()
        {
            super();

            var t:TextField = new TextField;
            t.type = TextFieldType.INPUT;
            addChild(t);
        }
    }
}

Это создает текстовое поле, где пользователь может печатать, но я не могу печатать специальные символы, такие как à.

Большое спасибо.

1 Ответ

3 голосов
/ 28 июня 2011

Если вы можете вставить его в поле ввода, вы сможете набрать его.

Если вы запускаете новый документ Flash, используя тот же шрифт, что и у вас выше, создайте текстовое поле ввода на сцене со следующими настройками:

Вставьте обычные глифы enter image description here

Вставить расширенные латинские глифы enter image description here

И это должно работать, как: enter image description here

Теперь, если все это работает, это может иметь какое-то отношение к тому, как класснаписано.

Написание классов, встраивающих шрифты, откровенно труднее.Убедитесь, что вы вставили шрифт в библиотеку и экспортировали его для сценария действия:

enter image description here

После этого вам необходимо использовать следующий код:

// The name of the font class
var _font:Calibri = new Calibri();

var _textFormat:TextFormat = new TextFormat();
_textFormat.font = _font.fontName;
_textFormat.size = 16;

// For some weird reason the ordering here is important. I remember mucking around with this for ages for an old project. EmbedFonts must come last
var _textField:TextField = new TextField();
_textField.defaultTextFormat = _textFormat;
_textField.type = TextFieldType.INPUT;
_textField.embedFonts = true;

addChild(_textField);

И все должно работать:

enter image description here

** EDIT ** Для тех, кто использует FlashDevelop и т. Д., Вы можете использовать следующий метод:

public class Main extends MovieClip {

    [Embed(source='assets/HOBOSTD.OTF', fontName='_hobo', embedAsCFF="false")] public static const HOBO:Class;

    public function Main() {
        var _font:Font = new HOBO() as Font;

        var _textFormat:TextFormat = new TextFormat();
        _textFormat.font = _font.fontName;
        _textFormat.size = 22;

           var _textField:TextField = new TextField();

        _textField.embedFonts = true;
        _textField.defaultTextFormat = _textFormat;
        _textField.autoSize = TextFieldAutoSize.LEFT;
        _textField.antiAliasType = AntiAliasType.ADVANCED;
        _textField.type = TextFieldType.INPUT;

        addChild(_textField);
    }
}

И вы получите следующее:

enter image description here

Теперь обратите внимание, что файл шрифта должен быть либо относительно вашего проекта, либо источник может указывать на C: \ windows \ fontпапка, если вы выберете.В приведенном выше примере я скопировал шрифт в папку с активами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...