Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 导航问题_Actionscript 3_Button_Random_Stage - Fatal编程技术网

Actionscript 3 导航问题

Actionscript 3 导航问题,actionscript-3,button,random,stage,Actionscript 3,Button,Random,Stage,我正在开发一个应用程序,我有一个导航问题。 我在舞台上有随机按钮,但不可避免地会有一些重叠。 我想解决这个问题,但我不知道如何解决。 有人有办法帮我吗 AS3 for(var i:int=0;i以下代码已经过测试,并且可以正常工作 var items:Array = []; var numItems:Number = 16; for(var i:int; i < numItems; i++) { var mc:Mc = new mc_square(); mc.butto

我正在开发一个应用程序,我有一个导航问题。 我在舞台上有随机按钮,但不可避免地会有一些重叠。 我想解决这个问题,但我不知道如何解决。 有人有办法帮我吗

AS3


for(var i:int=0;i以下代码已经过测试,并且可以正常工作

var items:Array = [];

var numItems:Number = 16;

for(var i:int; i < numItems; i++) {
    var mc:Mc = new mc_square();
    mc.buttonMode = true;
    addChild(mc);

    while(!freezone(mc)) {
        mc.x = Math.random() * 200;
        mc.y = Math.random() * 300;     
    }
    items.push(mc);
}

function freezone(mc:MovieClip):Boolean {
    var hit:Boolean = false;
    items.forEach(function(item:MovieClip, i:int, a:Array):void {
        if(mc.hitTestObject(item)) {
            hit = true;
        }
    });
    return !hit;
}
var项:数组=[];
变量numItems:Number=16;
for(变量i:int;i
简单的点击测试是一个简单的解决方案,但是如果有许多按钮,并且这些按钮的空间有限,则可能会遇到问题。根据情况,更好(更复杂)的解决方案可能是光栅化空间,并在(几乎)每个单元格中随机移动一个按钮:

// environment variables
const numButtons:int = 16;
const maxButtonWidth:int = DummyButton.MAX_WIDTH;
const maxButtonHeight:int = DummyButton.MAX_HEIGHT;
const width:Number = stage.stageWidth;
const height:Number = stage.stageHeight;
// pseudo-random positioning
// ratio is needed for a proportional grid
var areaRatio:Number = width / height;
var maxButtonRatio:Number = maxButtonWidth / maxButtonHeight;
// compute buttons per column and row (take aspect ratios into account)
var cols:int = Math.floor(Math.sqrt(numButtons) * (areaRatio / maxButtonRatio));
var rows:int = Math.ceil(numButtons / cols);
// available space for each button within a grid segment
var spaceX:Number = (width - maxButtonWidth * cols) / cols;
var spaceY:Number = (height - maxButtonHeight * rows) / rows;
// throw an error if buttons won't fit (based on maximum dimensions)
if (cols < 1 || rows < 1 || spaceX < 0 || spaceY < 0) {
    throw new Error("buttons do not fit into area");
}
// for every button
for (var i:int = 0; i < numButtons; i++) {
    var row:int = Math.floor(i / cols);
    var col:int = i % cols;
    var button:Sprite = new DummyButton();
    // coordinate = grid segment + random shift
    button.x = col * (maxButtonWidth + spaceX) + Math.random() * spaceX;
    button.y = row * (maxButtonHeight + spaceY) + Math.random() * spaceY;
    stage.addChild(button);
}
//环境变量
常数numButtons:int=16;
const maxButtonWidth:int=DummyButton.MAX_WIDTH;
常量maxButtonHeight:int=DummyButton.MAX\u高度;
常数宽度:编号=stage.stageWidth;
常数高度:数字=阶段高度;
//伪随机定位
//比例网格需要比率
变量面积比:数量=宽度/高度;
var maxButtonRatio:Number=maxButtonWidth/maxButtonHeight;
//计算每列和每行的按钮(考虑纵横比)
var cols:int=数学地板(数学sqrt(numButtons)*(面积比/maxButtonRatio));
变量行:int=Math.ceil(numButtons/cols);
//网格段内每个按钮的可用空间
var spaceX:Number=(宽度-maxButtonWidth*cols)/cols;
变量spaceY:Number=(高度-maxButtonHeight*行)/行;
//如果按钮不合适,则抛出错误(基于最大尺寸)
if(cols<1 | | rows<1 | | spaceX<0 | | spaceY<0){
抛出新错误(“按钮不适合区域”);
}
//每个按钮
for(变量i:int=0;i
// environment variables
const numButtons:int = 16;
const maxButtonWidth:int = DummyButton.MAX_WIDTH;
const maxButtonHeight:int = DummyButton.MAX_HEIGHT;
const width:Number = stage.stageWidth;
const height:Number = stage.stageHeight;
// pseudo-random positioning
// ratio is needed for a proportional grid
var areaRatio:Number = width / height;
var maxButtonRatio:Number = maxButtonWidth / maxButtonHeight;
// compute buttons per column and row (take aspect ratios into account)
var cols:int = Math.floor(Math.sqrt(numButtons) * (areaRatio / maxButtonRatio));
var rows:int = Math.ceil(numButtons / cols);
// available space for each button within a grid segment
var spaceX:Number = (width - maxButtonWidth * cols) / cols;
var spaceY:Number = (height - maxButtonHeight * rows) / rows;
// throw an error if buttons won't fit (based on maximum dimensions)
if (cols < 1 || rows < 1 || spaceX < 0 || spaceY < 0) {
    throw new Error("buttons do not fit into area");
}
// for every button
for (var i:int = 0; i < numButtons; i++) {
    var row:int = Math.floor(i / cols);
    var col:int = i % cols;
    var button:Sprite = new DummyButton();
    // coordinate = grid segment + random shift
    button.x = col * (maxButtonWidth + spaceX) + Math.random() * spaceX;
    button.y = row * (maxButtonHeight + spaceY) + Math.random() * spaceY;
    stage.addChild(button);
}