在不存在其他形状的地方创建形状



我正在想一种方法,使用CreateJS在不存在其他形状的地方创建形状。在这种情况下,我不太确定从哪里开始,甚至不知道该搜索什么。基本上,我的目标是让圆圈出现在舞台上,但只能出现在其他人没有的地方。

我的问题是,解决这个问题的好方法是什么?有没有任何文档或类似的东西可以帮助我实现创建代码的目的?

链接到JSFiddle

var stage = new createjs.Stage("canvas"),
    canvas = stage.canvas;
function createCircle(){
    var circle = new createjs.Shape().set({name:"circle"});    
    circle.graphics
        .beginFill("DeepSkyBlue")
      .drawCircle(0, 0, 25);
    circle.x = Math.random() * canvas.width;
        circle.y = Math.random() * canvas.height;    
    stage.addChild(circle);
}
setInterval(function(){ 
    createCircle();
  stage.update();
  }, 1000);

这里有一个非常简单的演示,它填充圆圈,确保它们不会接触。

  1. 生成随机圆形大小
  2. 随机选取x/y
  3. 检查与其他圆的距离
  4. 如果它没有接触,在那个点上画一个圆圈。如果触摸到,请重试

http://jsfiddle.net/lannymcnie/2o7do8kf/1/

// Basic distance checking
var circle = circles[i], 
  dX = circle.x - x, 
  dY = circle.y - y,    
  dist = Math.sqrt(dX*dX + dY*dY);
if (dist <= size + circle.size) {
  ok = false; 
  break;
}

这个演示将尝试100次(最多)来定位每个圆。如果它跑过100,它就会完全放弃。你可以把它增加到10000,它基本上得到相同的结果。

这显然不是最有效或最复杂的方法,但它可能会让你在不发疯的情况下找到足够接近你想要的东西。

最新更新