2011-12-21 5 views
1

JavaScriptでキャンバス用のゲームを開発しています。2つの変数(行と列)を宣言せずにN個のセルのグリッドを移動する

ワールドサイズのグリッドに制限されずにゲームを作成することを選択しました。だから、彼らがNのグリッドサイズで遊ぶことを望むなら、ロジックはそれを生成します。

私は境界検出を使用していて、ユーザーが画面外を移動することを決めた場合、グリッド上のセルの位置を変更する関数をプログラムし始めました。

わかりやすくするために、グリッドサイズをN = 9に縮小しました。これを視覚化することができます。ユーザが-x値セルをオフに移動する場合グリッド[2] [0]、それらがセルの右端X位置に現れる

[0][1][2] 
    [3][4][5] 
    [6][7][8] 

ように見えます。これをSQRT(N)と表す。だから私は右端がSQRT(N)であることを知っています。私はNが右下のセルであることも知っている[8]。

これは、ここでは、セルとその数式IDのサンプルです。

[0][1][SQRT(N)] 
    [3][4][5] 
    [N - SQRT(N)][7][N] 

上記グリッドは、4つの隅のX軸式を示し、私は、少なくとも静的マジックナンバースイッチケースの条件文を使用する前に、内部細胞式に答えることを試みることが重要です。これを行うための

if (player.X < 0 - 10) { 
    player.X = SCREEN_WIDTH; 
    if (gameQuadrent == 0) { 
     gameQuadrent = Math.floor(Math.sqrt(WORLD_SIZE)); 
    } else if (gameQuadrent == (WORLD_SIZE - Math.floor(Math.sqrt(WORLD_SIZE)))) { 
     gameQuadrent = WORLD_SIZE; 
    } else { 
     gameQuadrent--; 
    } 
} 

どれより効率的な方法を:ここ

は、私が説明しています何を示すいくつかのjavscriptコードですか?私は固定された世界のサイズに移動することなく、この問題を解決しようとしています。

非常に感謝しています。

+0

これは常に四角形に制限します - >四角形の世界を持つことに興味がありますか? – fixagon

+0

okタイトルをもう一度読んでください... – fixagon

答えて

2

数値がSQRT(WORLD_SIZE)の倍数である場合、Quadrentはワールドの左境界にあります。したがって、次のコードはそれに応じてgameQuadrentを更新する必要があります。

int side = Math.floor(Math.sqrt(WORLD_SIZE)); 
if (gameQuadrent % side) == 0) { 
    gameQuadrent += side - 1; 
} 
else { 
    --gameQuadrant; 
} 
+0

これは右側の考えを左側にしましたか?私は新しいユーザーがスタックオーバーフローするという制限に基づいて投票することはできません。私はあなたの助けに感謝します、良い一日:) – itignition

関連する問題