0

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

舞台是 500x500 像素,“块”是 75 像素到 30 像素,但我需要这样才能对具有不同宽度和高度的其他对象做同样的事情。我将非常感谢对此的解决方案。:)

块的创建在 AS 中完成。有一个为 AS 导出的名为 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;
    }


}

}

4

1 回答 1

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!");
}

您将不得不调整一些东西,并找到随机数,但这是核心逻辑。

于 2013-08-03T03:33:09.530 回答