我正在开发一个项目,我正在使用 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);
}
}
}
}