0

. . 大家好。

. . 我有一个由许多点(x,y)定义的画布——它不是矩形的,但至少它会遵循一些几乎六边形的形状(比如扭曲的六边形,角度总是 < 180 度)。我还有一大堆不同的矩形(或多或少 140 个,具有不同的宽度和高度),我需要将它们放置在形状内。它们必须像被重力推动一样定位(我的意思是......形状的顶部不需要填充,但底部需要)。. . 现在我唯一的想法是为每个“y”位置存储最小和最大“x”位置(例如:limits[300] = [30,30]; limits[299] = [29, 32]; .. .),遍历矩形,获取它们的面积,然后比较值以找到最佳位置。我现在最大的问题是它们需要以“有机”方式组织,而不是像表格(我不能有行和列并将它们放置在单元格内。它们需要尽可能好地定位就像流畅地,并排,一个在另一个之上......)。我不确定如何管理定位。. . 我知道一些“自动平衡”对象的好例子(一个很好的例子是“球池”Chrome 实验:http://mrdoob.com/projects/chromeexperiments/ball_pool/),但他们使用矩形画布和圆形对象,比较容易比较限制。. . 现在我最好的想法是检查每个可能的 x/y 组合的对象,从下到上,从左到右,检查是否有任何区域重叠,但这可能会锁定整个计算机几分钟的计算(屏幕上的项目越多,需要的计算就越多)。

. . 该项目在 Flash 上运行,但任何示例、提示、算法、论文或伪代码都会有很大帮助。

4

1 回答 1

0

我认为您可以使用物理模拟完成所有工作。这听起来可能很复杂,但并不像听起来那么难。actionscript 3 有几个物理 API。我使用了Box2D 的 as3 端口,我对结果非常满意。

我会采取的方法是:

  • 定义墙壁的形状(形成多边形的线条)
  • 定义框(矩形)
  • 使用适当的显示对象信息(链接 ID 等)创建物理体
  • 将它们添加到物理世界并进行模拟。

我不知道您对 actionscript 3 的体验如何,但请查看World Construction Kit。它应该可以让你快速上轨道。

于 2009-11-05T21:21:40.110 回答