【问题标题】:How to add movieclip inside textfield如何在文本字段中添加影片剪辑
【发布时间】:2012-12-23 02:08:03
【问题描述】:

我想在文本字段中添加一个影片剪辑。目标是能够滚动影片剪辑,因为 uiscrollbar 仅适用于文本字段,我认为滚动影片剪辑的解决方案是将其放在文本字段中。

我尝试过类似的方法:

myText.addChild(myClip); 

但失败并出现错误:1061:通过静态类型 flash.text:TextField 的引用调用可能未定义的方法 addChild。

【问题讨论】:

  • 好吧,你得到的答案是盲目的......为什么以及你要添加到文本字段中的内容是什么?我看不到将影片剪辑放入文本字​​段的用例(无论如何您都不能这样做)。可以使用许多组件进行滚动,只需将影片剪辑放在文本字段中,这样它就会滚动不是您想要的。解决方案 1 将剪辑包装在 Scroller 中。你试过这个吗?
  • 谢谢。我想要滚动影片剪辑和一些文本。我使用 scrollPane 来实现这一点。

标签: actionscript-3 apache-flex textfield movieclip addchild


【解决方案1】:

问题是TextField 不是DisplayObjectContainer,所以你不能添加孩子。

(好消息是您可以通过 Google 找到许多替代解决方案)

【讨论】:

    【解决方案2】:

    您将无法将其添加到文本字段中,我不确定您所说的“滚动影片剪辑”是什么意思,但假设您的影片剪辑大于您要显示的区域它,这样的事情可能会起作用:

    <s:Group>
        <s:Scroller>
            <mx:SWFLoader source="@Embed(source='movieclip.swf')"/>
        </s:Scroller>
    </s:Group>
    

    【讨论】:

      【解决方案3】:

      抱歉,这有点牵强,但我最近遇到了需要这种功能的情况。虽然我确信您不再需要这个问题的答案,但我希望我提出的解决方案能对其他人有所帮助。

      天哪,为什么会有人这样做?!

      在我的特殊情况下,我有一个需要滚动的超长文本字段。根据我的经验,在处理 非常长 文本字段时,通过垂直移动影片剪辑进行滚动是不可靠的,这需要我使用 Adob​​e/Flash uiscrollbar-esk 方法来调整文本字段的 scrollV .

      由于需要从库中提取的内嵌图像(而不是外部来源)以及文本部分周围的黑框边框,这两者都需要滚动,这使情况变得更加复杂连同文字。

      简而言之,对于一个完全独立的 swf 和在情有可原的情况下(如制药横幅),人们可能只需要这样做。

      从库中插入图片:

      要完成此操作,您需要从库中的图像创建一个影片剪辑并将该影片剪辑导出到 Actionscript。然后,在您的代码中,添加如下内容:

      //This is a string from your textfield that you will replace with an image
      var matchForImageSplit:String = 'IMAGE 1 GOES HERE';
      
      //This is the code to replace the above string
      //Here, "Image1" is the class name of the exported MovieClip
      var imageToAdd:String = '<img src="Image1" />';
      my_text.htmlText = my_text.htmlText.split(matchForImageSplit).join(imageToAdd);
      

      在文本周围添加黑框边框

      这有点棘手。我必须做的是创建一个带有我需要大小的边框的影片剪辑,并为其命名。然后我将它放在应该去的文本后面,并将所有这些都包含在parent_mc 电影剪辑中。

      然后我必须对框进行编码以随着滚动而移动。以下是我的具体项目,但这是它的要点:

      //THIS CODE IS NON-FUNCTIONAL AND SHOULD ONLY BE USED AS A REFERENCE
      
      //Redundant - just making the example more clear.
      var my_text:TextField = parent_mc.my_text; 
      var borderBox:Sprite = parent_mc.borderBox;
      
      //Vars for calculating position and movement
      var borderBoxStartY:Number = borderBox.y;
      var incrementRate:Number = my_text.textHeight/my_text.numLines;
      var sPos:Number;
      var top:Number = dragger.y;
      var bottom:Number = (dragger.y + track.height) - dragger.height;
      var range:Number = bottom - top;
      var ctrl:Number = parent_mc.y; //"parent_mc" is the parent MC that contains the textField and borderBox
      
      function dragScroll():void {
        ratio = my_text.maxScrollV/range;
        sPos = (dragger.y * ratio) - ctrl;  
      
        my_text.scrollV = Math.ceil(sPos);
        borderBox.y = ((borderBoxStartY + incrementRate) - (my_text.scrollV * incrementRate));
      }
      

      在尝试所有这些之前需要注意的一点是,当使用scrollV 时,文本会逐行移动,因此不会平滑滚动(就像基于位置的滚动一样)。这可能会导致滚动看起来“生涩”。

      编辑: 我还应该注意,这都是自定义编程的,实际上并没有使用scrollPane/uiscrollbar 组件,但行为方式相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-21
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多