4

フラッシュプロジェクトにStaticTextフィールドがあり、マウスをその上に置いたときにコードを実行する必要があります。だから私はこのコードを試しました

  stage.addEventListener(MouseEvent.MOUSE_OVER, mouseRollOver);
  function mouseRollOver(event:MouseEvent):void {
  var tf:StaticText  = event.target as StaticText;
  if (tf){
  //my code
  }
}

しかし、それは機能しません。動的テキストフィールドを使用し、var tfでStaticTextをTextFieldに置き換えると、正常に機能します。また、StaticTextをターゲットとしてではなく、特定のテキストプロパティ(「selectable」がtrueに設定されているなど)を持つある種のオブジェクトをマウスで検出できるようにすれば、静的テキストフィールドでこれを機能させることができると思いましたが、できませんでした。これを行う方法を理解します。とにかく、どういうわけかターゲットとして静的テキストフィールドを検出する必要があります。どんな助けでもいただければ幸いです。
前もって感謝します

4

2 に答える 2

2

最良のオプションは、静的テキストボックスをムービークリップに配置し、それに基づいてコードを割り当てることです。静的テキストボックスにはインスタンス名がなく、操作できません。

于 2013-03-05T14:37:45.257 に答える
0

これを行うのは難しいです。このリンクを参照してくださいここにリンクの説明を入力してくださいご覧 のとおり、DisplayObjectがStaticTextであるかどうかを確認でき、mousXプロパティとMouseYプロパティを確認することで、ロールオーバーがこのフィールドに関連しているかどうかを確認できます。動的テキストを使用し、選択可能なフィールドのチェックを外すと、StaticFieldとして機能するテキストフィールドが得られます

編集 これは私が意味する説明です:BlackflashドキュメントのステージにStaticTextフィールドを入れましょう。

var myFieldLabel:StaticText
var i:uint;

//This for check for all staticFields in state and trace its text. It is possible and it is working. I my case I have only one field and I get reference to it in myFieldLabel:StaticText var. Also I change it's alpha to 0.3.
for (i = 0; i < this.numChildren; i++) 
{
 var displayitem:DisplayObject = this.getChildAt(i);
 if (displayitem instanceof StaticText) {
     trace("a static text field is item " + i + " on the display list");
     myFieldLabel = StaticText(displayitem);
     
     trace("and contains the text: " + myFieldLabel.text);
     trace( myFieldLabel.mouseX);
     myFieldLabel.alpha = 0.3;
 }
}

//Adds event listener to the stage for mouse move event
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseRollOver);

//This is an event handler. I check if the mouse position is within the static field
function mouseRollOver(evnt:MouseEvent):void 
{
if ( 0 <= myFieldLabel.mouseX && myFieldLabel.mouseX <= myFieldLabel.width && 0 <= myFieldLabel.mouseY && myFieldLabel.mouseY <= myFieldLabel.height )
{
    mouseOverStaticText( evnt)
}
else
{
    mouseNotOverStaticText( evnt)
}
}

// this two methods change the static field alpha. Thay are only to show that is posible to detect and manipulate some properties of the StaticField.
function mouseOverStaticText( evnt)
{
 myFieldLabel.alpha = 1;
}
function mouseNotOverStaticText( evnt)
{
 myFieldLabel.alpha = 0.3;
}

StaticTextフィールドの管理の目的がわかりません。StaticTextは、何かをしなければならない場合に管理するように設計されていません。これにより、フィールドが静的であってはならないことがほぼ確実になります。動的(選択可能なプロパティなし)にするか、MovieClipでカプセル化するか、別のソリューションを使用することができます。場合。

于 2013-03-05T15:05:19.987 に答える