如何在没有它们的情况下添加对象

时间:2013-07-31 16:56:27

标签: actionscript-3 flash

我正在做一个测试/游戏,我遇到了一个我无法弄清楚的问题。 我正在尝试将对象(在我的情况下是Bricks)添加到舞台上,但是以这样的方式添加它们从不打到另一个,并且当舞台上没有任何空间时,停止添加它们并显示让说“没有更多空间”。

舞台是500x500px,“块”是75px到30px,但我需要这个能够对不同宽度和高度的其他物体做同样的事情。 我非常感谢这个解决方案。:)

块的创建在AS中完成。 有一个导出为AS的movieClip,其名称为Block

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


}

}

1 个答案:

答案 0 :(得分:0)

这就像实现代表网格的二维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!");
}

你必须调整一些东西,找到随机数,但这是核心逻辑。