1

テキストフィールドにムービークリップを追加したいと思います。目的は、ムービークリップをスクロールできるようにすることです。uiscrollbarはテキストフィールドでのみ機能するため、ムービークリップをスクロールするための私の解決策は、テキストフィールド内に配置することだと思います。

私は次のようなことを試しました:

myText.addChild(myClip); 

しかし、エラーで失敗しました:1061:静的タイプflash.text:TextFieldの参照を介して、おそらく未定義のメソッドaddChildを呼び出します。

4

3 に答える 3

0

それをテキストフィールドに追加することはできず、「ムービークリップをスクロールする」という意味が正確にはわかりませんが、表示したい領域よりも大きいムービークリップがあると仮定すると、何かこのようにうまくいくかもしれません:

<s:Group>
    <s:Scroller>
        <mx:SWFLoader source="@Embed(source='movieclip.swf')"/>
    </s:Scroller>
</s:Group>
于 2013-01-09T04:51:23.257 に答える
0

問題は、 aが aTextFieldではないためDisplayObjectContainer、子を追加できないことです。

(良いニュースは、Google で見つけることができる多くの代替ソリューションがあることです)。

于 2013-01-09T04:44:07.523 に答える
0

これがちょっとしたスレッド ジャックである場合は申し訳ありませんが、最近、このタイプの機能が必要な状況がありました。これに対する答えはもう必要ないと思いますが、私が思いついた解決策が他の人の助けになることを願っています.

親愛なる神よ、なぜ誰かがこれをするのでしょうか?!

私の特定のケースでは、スクロールする必要がある非常に長いテキストフィールドがありました。私の経験では、非常に長いテキスト フィールドを扱う場合、ムービークリップを垂直方向に移動してスクロールするのは信頼性が低く、Adobe/Flash uiscrollbaresk メソッドを使用し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);

テキストの周りにブラック ボックスの境界線を追加する:

これはもう少しトリッキーでした。私がしなければならなかったことは、必要なサイズの境界線を持つ MovieClip を作成し、名前を付けることでした。次に、それを本来あるべきテキストの後ろに配置し、そのすべてをムービークリップで囲みました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、テキストが行ごとに移動されるため、(位置ベースのスクロールのように) スムーズにスクロールしないことです。これにより、スクロールが「ぎくしゃく」することがあります。

EDIT:scrollPaneこれはすべてカスタムプログラムされており、実際には/uiscrollbarコンポーネントを 使用していませんが、同じように動作することにも注意してください。

于 2015-04-23T19:27:53.727 に答える