0

私は Javascript を使用してブラウザでプレイするゲーム Tetris を書いているプロジェクトに取り組んでいます。ゲームが動かなくなるという問題が発生しています。エラーメッセージは表示されません。ゲームがランダムな時間 (通常は約 30 秒) 後に一時停止し、その後何も起こらないかのようです。

ゲームループを使用してゲームを管理しています。これは、ゲームを管理するコードの最高レベルのセクションです。

var cycle = function GameTick(elapsed){

    if(menuStatus != "game"){
        renderMenu();
        updateMenu();
    }

    if(menuStatus == "game"){
        render();
        update();
    }

    requestAnimationFrame(cycle);
}

私の最初の本能は、これをしばらく実行した後、常に GameTick 関数の新しい反復を呼び出すと、スタック領域が不足することを示していますが、これが正しいかどうかはわかりません。ご協力いただきありがとうございます。不明な点がありましたら、喜んでご説明いたします。先に進むために多くを与えていないことはわかっていますが、ゲームコード全体 (非常に長い) を投稿する以外に何が役立つかわかりません。

編集:要求に応じてレンダリング機能と更新機能を投稿しています

function update(){

    var currentTime = performance.now();
    currentTime = Math.trunc(currentTime);

    if((currentTime - beginTime) > dropTime)
    {
        pieceMoved = movePieces();
    }

    if(!pieceMoved && (currentTime - beginTime) > dropTime)  //If no pieces can move
    {
        setPieceLocation();
        handleFullRows();
        spawnNewPiece();
        console.log(pieceArray.length)
    }

    if(pieceArray.length > 0)
        console.log(pieceArray[pieceArray.length - 1].color);

    if((currentTime - beginTime) > dropTime)
        beginTime = performance.now();
}

function render(){        //This function handles the rendering
    ctx.fillStyle = "white";
    ctx.fillRect(0, 0, canvas.width, canvas.height);

    if(pieceArray.length > 0)    //This renders the current moving piece
    {
        for(var j = 0; j < 4; j++)
        {
            drawColoredBlock(pieceArray[pieceArray.length - 1].color,
                             pieceArray[pieceArray.length - 1].xCoordinates[j],
                             pieceArray[pieceArray.length - 1].yCoordinates[j]);
        }
    }

    for(var i = 0; i < 10; i++)    //This renders all of the pieces that have been placed
    {

        for(var j = 0; j < 20; j++)
        {

            if(gameBoard[i][j] != 'white')
            {
                drawColoredBlock(gameBoard[i][j], i, j);
            }
        }
    }
}
4

0 に答える 0