我有一个随机创建10个点的数组。然而,在某个我不希望创建它们的区域。我怎样才能做到这一点?我的代码给了我错误2025.
"提供的DisplayObject必须是调用者的子级。"
它会偶尔按照指示(trace""+totalDots)
输出totalDots,但有90%的时间它会给我错误。
public var numDots:Array = [];
public var totalDots:int = numDots.length;
public var box:Box = new Box();
public function addBox():void
{
box.x = stageWidth/2;
box.y = stageHeight/2;
addChild(box);
}
private function addDot():void
{
for(var i:int = 0; i < 10; i++)
{
var dot:Dot = new Dot();
dot.x = Math.floor(Math.random() * stageWidth);
dot.y = Math.floor(Math.random() * stageHeight);
this.addChild(dot);
totalDots++;
trace(""+totalDots);
for(var j:int = 0; j < totalDots; j++)
{
if(numDots[j].hitTestObject(box))
{
stage.removeChild(numDots[j]);
numDots.splice(j, 1);
totalDots--;
}
}
}
}
答案 0 :(得分:3)
你的问题是你的嵌套循环。每次迭代时,添加一个新点,然后遍历所有现有点,如果它与盒子发生碰撞,则将其删除。我认为这不是你打算做的。
看起来你只是想确保在某个区域内没有添加点。在这种情况下,使用do while循环保持简单:
$ find ./servers -type -d -name *log* > excludefiles
$ tar czf ROOT/backup/servers/20150504.tar.gz -X excludefiles ./servers
答案 1 :(得分:1)
您永远不会在阵列中添加任何点。
您可以将点添加到显示列表中,如下所示:
this.addChild(dot);
并尝试将其删除:
stage.removeChild(numDots[j]);
尽管这个点从未添加到数组中,但即使它已经存在,也无法工作。这是因为this
不是stage
。它们是两回事。
您应该从不使用stage.addChild()
(有关详细信息,请查看文档)。只需拨打addChild()
,即相当于this.addChild()
。这可确保您始终使用同一个DisplayObjectContainer
答案 2 :(得分:0)
对于它的价值,您可以通过计算具有适当间隔的随机值(包含和排除区域之间的差异)并导出x
和{{1}来完全避免试用循环来自那里的坐标。
以下代码(用我不知道的语言编写,如果语法错误而道歉)有两种情况。 y
案例处理点将显示在排除框左侧或右侧的情况,if
值的范围仅限于该框的左侧或右侧。 x
大小写是框出现在框上方或下方的位置,else
值不受限制。
x
这假定var interval:int = stageWidth * stageHeight - box.w * box.h;
var cut:int = interval - (stageWidth - box.w) * box.h;
for (var i:int = 0; i < 10; i++) {
var r:int = Math.floor(Math.random() * interval);
var x:int;
var y:int;
if (r >= cut) {
r -= cut;
y = r / (stageWidth - box.w);
x = r - y * (stageWidth - box.w);
y += box.y;
if (x >= box.x) x += box.w;
} else {
y = r / stageWidth;
x = r - y * stageWidth;
if (y >= box.y) y += box.h;
}
var dot:Dot = new Dot();
dot.x = x;
dot.y = y;
this.addChild(dot);
totalDots++;
trace(""+totalDots);
}
完全在box
内。
另外值得注意的是它允许点重叠;与原始代码相同。
对于更复杂的形状,您可以将stageWidth,stageHeight
设置为该形状完全包围的最大矩形,以避免许多但不是所有重试情况。这对于大型形状和许多点有用。或者有些变体可以管理与另一种形状的完美契合(例如,椭圆)。