什么可能导致游戏循环在随机时间崩溃?

时间:2015-03-31 02:41:30

标签: javascript 2d-games tetris

我正在开展一个项目,我正在编写游戏俄罗斯方块,使用Javascript在浏览器中播放。我遇到了游戏停止工作的问题。它没有给出任何错误消息。这就好像游戏在一段随机时间(通常是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);
            }
        }
    }
}

0 个答案:

没有答案