2016-10-25 8 views
0

私はゲームのレベルのステージを自動的に生成しようとしています。 私は、アレイ(ノート、画面上の「タイル」の量れる16×16)製:アレイからの自動レベル生成

var background:Array=new Array(
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 
) 

をそして、あなたはおそらく言うことができるように、それぞれ1または0は、(タイルが一つまたは別の場合に対応しますこのシナリオにはそこにあるかどうか)。

私は次の部分でかなり悪いです。

私はhttp://www.flashgametuts.com/tutorials/as3/how-to-create-a-platform-game-in-as3-part-2/の方法を使ってこれを作ることにしました。

var bkgblocks:Sprite=new Sprite(); 
var bkgblocksw:Number=stage.stageWidth/16 
var bkgblocksh:Number=stage.stageHeight/16 

//the blocks are 45 pixels wide and tall 

var row:int=0; 
for(var i:int=0; i<background.length;i++){ 
    if((i+1)/16==int((i+1)/16)){ 
     //if i is divisible by 16 
     row++ 
    } 
    if(background[i]==1){ 
     bkgblocks.graphics.beginFill(0x000000) 
     bkgblocks.graphics.drawRect(I have no idea what to do here ,row*stage.stageHeight/16,bkgblocksw,bkgblocksh); 
     bkgblocks.graphics.endFill() 
     addChild(bkgblocks) 
    } 
} 

ご覧のとおり、どのようにブロックを配置するかわかりません。

私はy座標をどこに置くべきですか?xはあまりにも混乱しています。

私はこの

i*(45/(row+1)) 

ような何かを行うことができると思ったが、それは完全に台無しに。これはもっと数学的な質問ですが、申し訳ありませんが、誰かがこれを理解できれば、私はそれを感謝します。

答えて

2

1D-2D座標変換に絡んでいるようです。

画面の幅(2次元座標)をWdtとしましょう。したがって、(x、y)座標の要素は、y * Wdt + x 1D配列のインデックスになります。

A[y * Wdt + x] corresponds to Screen[y][x] 

とバックtranform:

x = index %% Wdt //integer modulus 
y = index \ Wdt //integer division 

Screen[index \ Wdt] [index %% Wdt] = A[index] 
3

私は通常それより人間が読める電子にするために、配列の配列にグリッドを梱包好みます。 g。最初の(外側の)アレイはセルの行を含ん

var grid:Array = [ 
    [0, 0, 1, 0, 0], 
    [0, 1, 0, 1, 0], 
    [1, 0, 0, 0, 1], 
    [0, 1, 0, 1, 0], 
    [0, 0, 1, 0, 0] 
]; 

、配列によって表される各行は
だからgrid[y][x]を呼び出すことによって、セルにアクセスして「真の」を見つけることによってxyを乗算することにより調整することができますconst CELL_SIZE

関連する問題