2011-03-03 180 views
-1

我正在開發一個應用程序,我有導航問題。 我在舞臺上有隨機按鈕,但它是不可避免的一些重疊。 我想解決這個問題,但我不知道如何。 有沒有人有任何想法來幫助我?導航問題

AS3

for (var i:int=0; i<16; i++){ 
var mc_sq:MovieClip = new mc_square(); 
mc_sq.y = Math.round(Math.random()* 200); 
mc_sq.x = Math.round(Math.random()* 300); 
mc_sq.buttonMode = true; 
addChild(mc_sq); 
} 

回答

0

下面的代碼已經被測試和工程

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; 
} 
0

簡單的點擊測試將是一個簡單的解決方案,但可能會遇到你遇到問題,如果有許多按鈕,只限於這些空間。根據情況,更好的(也是更復雜的)解決方案可能是對空間進行光柵化並將按鈕放入(幾乎)隨機移位的每個單元中:

// 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); 
}