【问题标题】:Random flashing white pixel at the bottom of the insertion point/caret in TextField? (Flash/AS3)TextField中插入点/插入符号底部的随机闪烁白色像素? (闪存/AS3)
【发布时间】:2013-07-16 21:15:21
【问题描述】:

我正在使用 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显示闪烁的黑色像素而不是白色像素。

【问题讨论】:

  • 你试过系统字体吗,比如Arial?
  • 刚试过,是的,它仍然显示闪烁的白色像素。
  • 文本字段上的“I”形鼠标指针在顶部和底部水平线的中间有一个小间隙。这个神器会不会是闪烁的文本光标和鼠标指针间隙的组合?你能试着改变电影的背景,看看那个像素到底是从哪里来的吗?
  • 像素在文本域内跟随文本光标,与鼠标光标无关。虽然,我试着看看当文本溢出和文本移动时会发生什么。似乎您在固定宽度内输入的越多,白色闪烁像素似乎移动得越右。 i.imgur.com/76CBd4R.png
  • 每次都会出现这种情况,尝试在背景较暗的舞台前制作自定义项目。添加一个带有白色文本、任何系统字体的文本字段,它应该在焦点上显示白色闪烁的像素。

标签: actionscript-3 textfield flash flashdevelop


【解决方案1】:

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

【讨论】:

  • 您的规格是什么?我尝试设置cacheAsBitmap,它什么也没做。
【解决方案2】:

我构建了一个测试类来隔离所描述的问题,并且问题不会重现。您应该能够在 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);
        }

    }
}

【讨论】:

  • 您使用的是我在原帖中提到的播放器版本吗?你也在 Windows 上吗?
  • 是的。我使用的是 Flash Player 11.8 版 - 您使用的是什么版本的 flex SDK 和发布到设置。和windows 7 64位。在最新版本的 chrome、firefox 和 IE 中测试。
  • 似乎是隐藏它的 64 位版本。有机会试试 32 位吗?
  • 对于所有这些计算机,没有 32 位窗口。还有其他人吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 正如我所提到的,这是 11.7 NPAPI 以后的版本(包括 11.8 和原始帖子中包含的其他版本)。这不是使用 HTML 文件,只是在独立插件中运行的普通 SWF 文件。没有任何技巧,只需在深色背景上使用带有白色文本的 TextField
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多