1

ラベルを表示したい四角形があります。長方形のスプライトを作成し、スプライトの表示ツリーに textField を追加することで、これを実行しようとしました。

問題は、textField の周りに余分な空白のパディングがたくさんあるように見えることです。テキストはボックス内に収まりますが、textField の境界は、それを含む四角形の可視領域を超えています。これにより、長方形の幅と高さも変更されます。

問題は、ユーザーが画面上で四角形をドラッグできるようにすることです。MOUSE_DOWNドラッグを開始するイベント リスナーを追加しました。ただし、ユーザーは、長方形自体だけでなく、表示されている長方形の周囲の領域をクリックしてドラッグを開始できます。これは、ユーザーが実際に TextField から来る余分な空白スペースをクリックし、端から染み出しているためだと思います

何か案は?

4

2 に答える 2

0

あなたが探しているのはtextField.autoSizeパラメータだと思います。これにより、テキストフィールドの境界がテキストのサイズに縮小されます(それ以外の場合は、含まれているテキストに関係なく、デフォルトの高さ/幅になります)

import flash.text.TextField;
import flash.text.TextFieldAutoSize;

var textField:TextField = new TextField();

textField.autoSize = TextFieldAutoSize.LEFT;
textField.text = "your text"; //set this AFTER autoSize

textFieldの幅を長方形の幅に設定することもできます。または、autosizeプロパティを省略し、テキストボックスの高さ/幅を長方形の高さ/幅に手動で設定します。ただし、これにより、収まらないテキストは切り捨てられます。

テキストフィールドには常にいくつかのパディングがあります。実際のテキストの正確な境界を取得するのは難しい場合があります(可能ですが)。より簡単な方法は、テキストボックスをマスクすることです。

グラフィッククラスを使用して長方形を描画する場合は、次のように実行できます。

var rectangle:Sprite = new Sprite();
rectangle.graphics.beginFill(0xFF0000);
rectangle.graphics.drawRect(0,0,100,100);
addChild(rectangle);

var myMask:Shape = new Shape();
myMask.graphics.copyFrom(rectangle.graphics);
rectangle.addChild(myMask);

var textField:TextField = new TextField();
textField.width = rectangle.width;
textField.height = rectangle.height;
textField.mask = myMask;

rectangle.addChild(textField);

実行できるもう1つのオプションは、イベントリスナーで、ターゲットがテキストボックスであるかどうかを確認し、関数を終了することです。(このメソッドを使用する場合は、テキストフィールドのmouseEnabledプロパティがtrue(デフォルト)であることを確認してください)

function rectangleClickHandler(e:Event):void {
    if(e.target == myTextField) return;
    //rest of your code
}
于 2012-09-15T00:10:47.293 に答える
0

マスクなどよりも簡単なもう1つの方法は、テキストフィールドがマウスイベントを受け取らないようにすることです。これにより、テキストフィールドとの相互作用から発生するマウスイベントは停止しますが、長方形上でそれらを処理することはできます。

ここで重要な項目は、mouseEnabledフラグです。コンテナでmouseChildrenを有効のままにしますが、コンテナとテキストフィールドの両方のmouseEnabledを無効にします。

var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.text = "Testing the text mouse enabled";

var rectangle:Sprite = new Sprite();
rectangle.graphics.beginFill(0xFF0000);
rectangle.graphics.drawRect(0,0,100,100);

var container:Sprite = new Sprite();
container.addChild( rectangle );
container.addChild( tf );
addChild( container );

// IMPORTANT FLAGS HERE
tf.mouseEnabled = false;
container.mouseEnabled = false;
container.mouseChildren = true;

container.addEventListener( MouseEvent.ROLL_OVER, rollOverHandler, false, 0, true );

イベントハンドラーは、テキストフィールドではなく、コンテナーの他の子がロールオーバーされたときにのみ起動します。このメソッドを使用すると、コンテナオブジェクト内のマウス対応コンポーネントを選択的にアクティブ化できます。

于 2012-09-15T22:51:43.767 に答える