0

特定の数のアイテムをグリッドに表示するためのエレガントな方法を見つけようとしています。答えは部分的にモジュラスにあるように感じますが、それよりも少し複雑です。設定された列数に基づいてグリッドにアイテムを配置する方法を知っています。このようなもの:

for (var j=0;j<numFiles;j++){
clip.x = clip.width * (j % cols);
clip.y = clip.width * int(j / cols);
}

しかし、私がやりたいのは、アイテムが1つしかない場合(j = 0)、画像が使用可能な領域全体(stage.Widthとstage.Height、または簡単にするために1000pxと500px)をカバーするように設定することです。2つのアイテムがある場合、2つの列があり、画像はステージの幅の半分とすべての高さ(500x500)を占め、3つのアイテム-3列(300x500)、4つのアイテム-2列と2行( 500x250)など、バランスの取れたグリッドレイアウトを維持しながら、アイテムのサイズを減らし、論理的かつバランスの取れた方法で行数を増やします。

これを数学的に行う方法が必要ですが、私はそれに出くわしておらず、自分でそれを把握することはできないようです。誰かアイデアがあれば聞いてみたいです。私はFlashAS3でこれを行っていますが、どんな例でも役に立ちます。

4

1 に答える 1

2

これはトリッキーな問題です:)

@ThatSteveGuyは正しいです; 一部のファイル数は実際にはうまく機能しない可能性があります。

これを解決する1つの方法は、ツリーマップまたはマンソンリーアルゴリズムを使用することです

ツリーマップの実装はここから入手できます:http ://www.arpitonline.com/blog/downloads/treemap2/srcview/ (記事

残念ながら、これはdisplayListと強く結びついており、少し奇妙なものもあります(たとえば、さまざまなオフセットを持つ複数のdisplayObjectで複数のrectをレンダリングするなど)が、機能します:)

ここに組積造のコード胚があります:Actionscriptのプログラムによる組積造/スペースファインディングレイアウト

于 2011-03-04T14:14:23.527 に答える