8

我正在使用 FlashDevelop 和 Flash Player 11.7(NPAPI 版本)。

基本上,我在 TextField 具有焦点时出现的插入点/插入符号/文本光标的底部看到一个随机的白色像素。它随着文本光标的闪烁而不断闪烁,但间隔不同。这让我疯狂。

这是经过几次尝试后我设法获得的屏幕截图:

屏幕抓取

为什么它会这样做,我该怎么做才能禁用它?

this._textField = new TextField();
this._textField.defaultTextFormat = new TextFormat("FleftexYC", 8, 0x000000, true);
this._textField.embedFonts = true;
this._textField.height = 13;
this._textField.type = TextFieldType.INPUT;
this._textField.x = 9;
this._textField.y = 7;

FleftexYC 是一种自定义/嵌入字体,但这不是问题。像 Arial 这样的系统字体仍然会发生这种情况。

有什么想法吗?

[编辑]:也在 11.8 中确认。但是,在 Internet Explorer 中,像素是黑色而不是白色。

[编辑]:我使用的是 Windows 7,不确定这是否也发生在 Mac 上。这不会发生在 Google Chrome 的 PPAPI 版本的 Flash 上,但它确实发生在 NPAPI 版本和 Internet Explorer 的版本中。

[编辑]:除了 Internet Explorer,看起来 Mozilla Firefox显示了闪烁的黑色像素而不是白色像素。

4

4 回答 4

0

随着您的应用程序变得越来越复杂,Flash 中的文本字段因出现奇怪的渲染问题而臭名昭著。他们会没事的,然后突然之间,一个看似无关的变化把一切都搞砸了。有一个陡峭的学习曲线,但切换到 TLF 领域。方式更稳定。

于 2013-11-03T02:57:41.183 回答
0

我无法重现您的错误,但也许在文本字段上设置 .cacheAsBitmap 会有所帮助。它会减慢一点 - 但你必须自己尝试。

于 2013-07-26T11:15:40.493 回答
0

我建立了一个测试类来隔离所描述的问题,并且问题不会重现。您应该能够在 Flash 开发中创建一个新项目并在任何浏览器中对其进行测试,并查看问题不是由您上面显示的任何代码引起的。

它可能是由程序的其他部分引起的,例如当您将值分配给“test”并设置选择时。但是您可以通过运行它来消除一些可能的原因。

如果运行此代码的计算机上确实存在问题,那么您的闪存版本已损坏。删除并重新安装应该可以修复它,或者该机器的某些其他独特方面导致您的闪存以非标准方式编译。(但就其价值而言,这不太可能)

另一种可能性是浏览器。您确定您的浏览器缩放设置为 0 吗?这似乎也不太可能。您是否在使用其他 API,例如 stage3D?自定义抗锯齿?

这是我的课:

    package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.text.TextFormat;

    /**
     * ...
     * @author Zachary Foley
     */
    public class Main extends Sprite 
    {
        //[Embed(source='C:/WINDOWS/Fonts/verdana.ttf', fontFamily="Verdana", fontWeight="regular", embedAsCFF="false")]
        [Embed(source='C:/WINDOWS/Fonts/arial.ttf', fontFamily="Verdana", fontWeight="regular", embedAsCFF="false")]
        public var Verdana:Class;

        private var mytextfield:TextField = new TextField();
        private var mytextformat:TextFormat = new TextFormat();
        private var _textField:TextField;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            this._textField = new TextField();
            this._textField.defaultTextFormat = new TextFormat("Verdana", 8, 0x000000, true);
            this._textField.embedFonts = true;
            this._textField.height = 13;
            this._textField.type = TextFieldType.INPUT;
            this._textField.x = 9;
            this._textField.y = 7;
            this._textField.text = "Test";
            addChild(_textField);
        }

    }
}
于 2013-08-03T00:20:46.063 回答
0

如果您尚未从 Flash 发布 HTML 文件,请尝试将整个发布代码复制到您的页面中。

于 2013-08-02T13:25:44.430 回答