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; 展开
还请高手指点迷津,不胜感激!
部分代码如下:
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; 展开
1个回答
展开全部
我好象回答了这个问题,其实这个问题不是简单的问题哟。
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;
}
}
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;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询