2013-07-31 42 views
0

我正在做一個測試/遊戲,我遇到了一個問題,我無法弄清楚。 我試圖在舞臺上添加對象(在我的例子中爲磚塊),但是添加的方式是它們從來不會碰到另一個,並且當舞臺上沒有剩餘空間時,停止添加它們並顯示可以說「沒有更多的空間」。如何添加沒有他們的物體相互碰撞

階段是500x500px,「塊」是75px到30px,但我需要這個能夠對其他具有不同寬度和高度的對象進行相同操作。 我會非常感謝爲此提供的解決方案。:)

創建塊是在AS中完成的。 有出口爲AS的名稱座

package { 

import flash.display.MovieClip; 
import flash.events.Event; 

public class MainClass extends MovieClip { 

    private var _blockTime:Number = 0; 
    private var _blockLimit:Number = 20; 
    private var Number_:int =0; 
    private var _blockHolder:MovieClip = new MovieClip(); 

    public function MainClass() { 
     addEventListener(Event.ENTER_FRAME ,onEveryFrame); 
     this.addChild(_blockHolder) 

    } 


    private function onEveryFrame(ev:Event):void{ 
     makeBlocks(); 
    } 


    private function makeBlocks():void{ 
     _blockTime++; 
     if(_blockTime >= _blockLimit){ 
      var _block:Block = new Block(); 
      _block.y = Blocks_YX_Positioning() 
      _block.x = Blocks_YX_Positioning() 
      _blockHolder.addChild(_block); 
      _blockTime = 0; 
      Number_++ 
     } 
    } 

    //code so the block is staing on the stage 
    private function Blocks_YX_Positioning():int{ 
     var _block_YX:int = Math.random()*500 
     if (_block_YX < 0) { 
      _block_YX = 50; 
      } 
     if (_block_YX > 450) { 
     _block_YX = 450; 
     } 
     return _block_YX; 
    } 


} 

}

+0

你的問題不是很需要它的地方。聽起來好像你在問如何實現碰撞檢測(基本上是訓練);這些問題表明缺乏研究(請參閱:http://stackoverflow.com/help/how-to-ask)。如果您在分享的代碼中遇到問題,那麼您會發現願意提供幫助的響應速度更快的社區。保持;看起來你正朝着正確的方向前進。 :) – Atriace

回答

0

這是爲實現一個2維Array代表一個網格,簡單的一個影片剪輯。你不需要任何碰撞檢測。

這我怎麼去。首先創建一個代表網格的Array

var arrayGrid = []; 

// define number of elements in grid 
var columns = Math.floor(500/70); 
var rows = Math.floor(500/30); 

// create the references: 1,2,3,4 etc. 
for(var i = 0; i < columns * rows; i++) { 
    array[i] = i; 
} 

正如你可以看到,我們正在把一批在數組中的每個元素在虛網的每一個元素。如果網格是5 x 5,那麼它會有25個元素。

然後你製作一個像putBrick這樣的函數,它使用數組中的一個數字隨機地將你的磚放到舞臺中。我使用12作爲隨機數。在函數的結尾刪除我們用作參考的數組的元素。在功能開始時檢查數組是否爲空。

if(arrayGrid.length > 0){ 
    var someRandomNumber = 12; 

    var currentCol = someRandomNumber % columns; 
    var currentRow = Math.floor(someRandomNumber/columns); 

    brick.x = currentCol * brick.width; 
    brick.y = currentRow * brick.height; 

    array.splice(someRandomNumber,1);    
} else { 
    trace("we are done here!"); 
} 

你將不得不調整一些東西,找到隨機數,但這是核心邏輯。

+0

這實際上工作很nice.I永遠不會想用數組來做這個工作。非常感謝 – GregorII

+0

接受並投票答案,如果你發現它有用;) – Pier

+0

以及我會這樣做,但它說我沒有所需的聲望投票了:(對不起 – GregorII