3

Flash と ActionScript は初めてですが、うまく管理できています。私の邪魔をし続けているものの 1 つは、s のwidthheightプロパティですDisplayObject(Container)。私はついにそれらの周りに頭を抱え始めており、Spriteたとえば a の幅と高さはそれらの内容によってのみ決定されることを学びました。

私は次のことを理解していません:私はたくさんのs をSprite追加するを持っています。Buttonボタンにはすべてheight30 と0 があります。そのため、含む の は 30 であるyと予想されます。驚いたことに、は 100 です。heightSpriteheight

heighta のプロパティに関する Adob​​e ドキュメントには、次のように記載されていDisplayObjectます。

表示オブジェクトの高さをピクセル単位で示します。高さは、表示オブジェクトのコンテンツの境界に基づいて計算されます。

どうやら、オブジェクトの「境界」が重要です。Spriteだから私は先に進んで、 s を含むこの小さなテストを書きましたButton:

for (var i:int = 0; i < numChildren; ++i)
{
    trace("Y: " + getChildAt(i).y + " H: " + getChildAt(i).height);
    trace("BOUNDS H: " + getChildAt(i).getBounds(this).height);
}
trace("SCALEY: " + scaleY + " TOTAL HEIGHT: " + height);

このコードは、表示リストに追加されたすべてのオブジェクトを繰り返し処理し、それらのyheightおよび のgetBounds().height値を表示します。驚くべきことに、出力は次のとおりです。

Y: 0 H: 30
BOUNDS H: 100
... (5x) 
SCALEY: 1 TOTAL HEIGHT: 100

これは、ボタンの境界が実際には高さ (および視覚的に表示される高さ) よりも大きいことを示しています。しかし、なぜそうなのかはわかりません。だから私の質問は:

  • ボタンの境界が高さよりも大きいのはなぜですか?
  • Sprite含まれるオブジェクトの位置とサイズに基づいてボタンが予想よりも大きくならないように、ボタンの境界を設定するにはどうすればよいですか?

ちなみに、ボタンは次のように作成されます。

var control:Button = new Button();
control.setSize(90, 30);
addChild(control);
4

2 に答える 2

1

アドビから:

targetCoordinateSpace オブジェクトの座標系に相対的な表示オブジェクトの領域を定義する四角形を返します。メソッドに渡す targetCoordinateSpace パラメーターに応じて、返される四角形がどのように変化するかを示す次のコードを検討してください。

 var container:Sprite = new Sprite();
 container.x = 100;
 container.y = 100;
 this.addChild(container);
 var contents:Shape = new Shape();
 contents.graphics.drawCircle(0,0,100);
 container.addChild(contents);
 trace(contents.getBounds(container));
  // (x=-100, y=-100, w=200, h=200)
 trace(contents.getBounds(this));
  // (x=0, y=0, w=200, h=200)

注: localToGlobal() および globalToLocal() メソッドを使用して、表示オブジェクトのローカル座標を表示座標に、または表示座標をローカル座標にそれぞれ変換します。

getBounds() メソッドは getRect() メソッドに似ています。ただし、getBounds() メソッドによって返される Rectangle には形状のストロークが含まれますが、getRect() メソッドによって返される Rectangle には含まれません。例については、getRect() メソッドの説明を参照してください。


私が理解していることから、ボタンの getbounds はデフォルトで 100 に設定されています。100 を超えて高さを増やしてみてください。それでも getbounds は 100 を返します。私の推測では、特にすべてのコントロールに設定されたある種のデフォルト値です。

また、高さを取得したい場合は、代わりに:

getChildAt(i).getBounds(this).height

使用する :

getChildAt(i).height
于 2010-12-13T08:12:57.193 に答える
0

コンテナオブジェクトのスケールをトレースしているようですが、getChildAt(i)にもっと関心があるはずです。scaleYプロパティ(つまり、ボタンのスケーリング)。これはおそらく30/100(0.3)です。

Button自体がスケーリングされていない場合(可能性は低いです)、Buttonクラスがscaleプロパティとheightプロパティをオーバーライドして、親クラスの実装が返す値とは異なる値を返すことが原因である可能性があります。

于 2010-05-19T18:17:13.797 に答える