我需要在Flash影片中随机散布可变数量的对象。只是随机选择位置不会产生视觉上令人愉悦的输出。物体最终彼此叠加,一边都聚集在一起,等等。
我正在寻找类似于Photoshop在将图像转换为位图模式时用来创建Difussion Dither的算法。
答案 0 :(得分:2)
低成本方法:生成某种基础重复模式(例如网格),然后扰乱位置。这将给出随机性的外观,包括一些规律性:
伪代码啊:
for(x=0; x<max; x+=step) {
for(y=0; y<max; y+=step) {
location = x*step+random(randsize), y*step+random(randsize);
}
}
尝试步长和randsize,直到它看起来不错。
请注意,这并不排除重叠;要做到这一点,在相邻的x之间添加一个随机数量,或者查看类似随机点的Voronoi图,或生成一系列随机点并删除重叠,或者......
答案 1 :(得分:1)
如果你没有那么多物品,这很粗糙但可行:
var myObjects:Array;
...
for (var i = 0; i < myObjects.length; ++i) {
var overlaps:Boolean = true;
while (overlaps) {
// Pick a random location
myObjects[i]._x = Math.random() * WIDTH;
myObjects[i]._y = Math.random() * HEIGHT;
// Make sure it doesn't overlap any object that has been placed
overlaps = false;
for (var j = 0; j < i; ++j) {
if (myObjects[i].hitTest(myObjects[j])) {
overlaps = true;
break;
}
}
}
}
一些警告:
编辑:略微修改代码,因此适用于AS2,而不是AS3
答案 2 :(得分:0)
随机是永远不够随意的,是吗? :)探索伪随机数生成器可能是值得的。这里有一个很好的实现/示例:http://lab.polygonal.de/2007/04/21/a-good-pseudo-random-number-generator-prng/
尝试使用一些种子直到找到视觉上令人愉悦的东西。祝你好运!