我正在做一个测试/游戏,我遇到了一个我无法弄清楚的问题。 我正在尝试将对象(在我的情况下是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;
}
}
}
答案 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!");
}
你必须调整一些东西,找到随机数,但这是核心逻辑。