Flash AS3.0中如何使从库中加载到舞台上的多个元件,随机坐标显示的时候不相互重叠?

如题,随机坐标已实现,但是因为随机坐标的元件过多,导致在舞台上显示的时候总是发生重叠现象,该加入什么代码避免重叠现象?还请高手指点迷津,不胜感激!部分代码如下:vary1... 如题,随机坐标已实现,但是因为随机坐标的元件过多,导致在舞台上显示的时候总是发生重叠现象,该加入什么代码避免重叠现象?
还请高手指点迷津,不胜感激!
部分代码如下:

var y1_mc:yuan1;
y1_mc=new yuan1();

this.addChild(y1_mc);
y1_mc.x=Math.random()*460+40;
y1_mc.y=Math.random()*320+40;

y2_mc=new yuan2();
var y2_mc:yuan2;

this.addChild(y2_mc);
y2_mc.x=Math.random()*460+40;
y2_mc.y=Math.random()*320+40;
展开
 我来答
zb6306
2012-11-08 · TA获得超过777个赞
知道大有可为答主
回答量:2585
采纳率:66%
帮助的人:1148万
展开全部
import flash.display.Shape;
var ballN:uint = 20;
//此为最大球的半径
var ballR:Number = 50;
var gAr:Array=new Array();
var ballAr:Array = [];
const stageW:Number = stage.stageWidth;
const stageH:Number = stage.stageHeight;
//格子的数量
var gw:uint = uint(stageW / ballR);
var gh:uint =uint( stageH / ballR);
if (ballN>gw*gh)
{
ballN = gw * gh;
}
//我们创建一个没有任何球的空格子数组,用以将重复的球填充到这些空格子中
var nullAr:Array = [];
var 重复格子:Array = [];
//现在创建一个绘制球的函数
function drawBall(vol:Number):Shape
{
var ball:Shape=new Shape();
with (ball.graphics)
{
beginFill(0x880000,1);
drawCircle(0,0,vol);
endFill();
}
return ball;
}
//现在创建球,并随机分布在舞台上
for (var i:uint=0; i<ballN; i++)
{
var ball:Shape = drawBall(Math.random() * ballR * 0.25 + ballR * 0.25);
ballAr[i] = ball;
ball.x = Math.random() * stageW;
ball.y = Math.random() * stageH;
addChild(ball);
}
//创建格子数组
for (var gm:uint=0; gm<gh; gm++)
{
for (var gn:uint=0; gn<gw; gn++)
{
//我们在这创建二维数组,第个格子看成一个二维数组中的成员
var 格子数组:Array = [];
gAr.push(格子数组);
}
}

//现在我们用另外一个循环来将格子推进这个二维数组
for (var k:uint=0; k<ballAr.length; k++)
{
var m:uint = Math.floor(ballAr[k].x / ballR);
var n:uint = Math.floor(ballAr[k].y / ballR);

//下面我们把坐标重新排列一下,
ballAr[k].x = m * 50;
ballAr[k].y = n * 50;
gAr[gw * n + m].push(ballAr[k]);
}
//下面我们来看一下有哪个格子有重复的;
for (var mm:uint=0; mm<gAr.length; mm++)
{
if (gAr[mm].length == 0)
{
nullAr.push(mm);
}
else if (gAr[mm].length>1)
{
重复格子.push(gAr[mm]);
}
}
var 重复格子数 = 重复格子.length;
var index:uint = 0;
//现在把重复的从新填充到空格子中
for (var _i:uint=0; _i<重复格子数; _i++)
{
//这个的前提是球的总是不能大于gw*gh
for (var _m:uint=0; _m<重复格子[_i].length-1; _m++)
{
index++;
var num:uint = nullAr[index];
重复格子[_i][_m].x = (num % gw) * ballR;
重复格子[_i][_m].y = Math.floor((num / gh)) * ballR;
}
}
灬心羽
2012-11-07 · TA获得超过1163个赞
知道小有建树答主
回答量:921
采纳率:100%
帮助的人:362万
展开全部
var y1_mc:yuan1;
var yArray:Array = new Array();

for (var i:int =0; i<10; i++)//想要几个就循环几次
{
y1_mc=new yuan1();
this.addChild(y1_mc);
rand();
yArray.push(y1_mc);
}
function rand():void
{
y1_mc.x = Math.random() * 460 + 40;
y1_mc.y = Math.random() * 320 + 40;

for (var j:int =0; j<yArray.length; j++)
{
if (y1_mc.hitTestObject(yArray[j]))//检测是否发生碰撞
{
trace("碰");
rand();
break;
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
偷袭抵抗
2012-11-07 · TA获得超过140个赞
知道小有建树答主
回答量:319
采纳率:100%
帮助的人:324万
展开全部
把所有小球放入一个数组,
一个小球随机生成坐标后 把它和前面坐标已经固定小球 进行碰撞检测 或者 进行距离比较
碰撞了,或者距离太近 则重新生成坐标
追问
能根据我上面提供的代码,具体说一下代码吗?   我是个初学者    不知道怎么弄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sky192837
2012-11-08 · 超过16用户采纳过TA的回答
知道答主
回答量:116
采纳率:0%
帮助的人:55.9万
展开全部
用hitTest来检测元件是可以的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式