在继续游戏循环之前等待用户鼠标按下事件
Wait for the user mouse down event before continuing game loop
我有一个游戏循环,在每个玩家移动后重新绘制游戏板。我想暂停主循环并等待玩家在棋盘上放置一块棋子,即在 canvas 上触发鼠标按下事件。现在游戏循环继续重绘棋盘。有没有办法在继续循环之前等待玩家移动?
var initGameLoop = function() {
player1 = new humanPlayer();
player2 = new computerPlayer();
while (gameState) {
redraw();
player1.acceptMove();
redraw();
player2.acceptMove();
}
};
var humanPlayer = function() {
this.acceptMove = function() {
canvas.addEventListener("mousedown", addPieceWithMouse);
};
};
var computerPlayer = function() {
this.acceptMove = function() {
computerMove();
};
};
这显示了使用连续游戏循环的预期效果。当 gameState 为 playerMove
.
时,它不会 运行 重绘
var canvas = document.getElementById("can");
var ctx = canvas.getContext('2d');
var gameState = "normal";
var initGameLoop = function() {
player1 = new humanPlayer();
player2 = new computerPlayer();
function animate () {
if(gameState === "playerMove") {
} else {
player1.acceptMove();
player2.acceptMove();
redraw();
}
requestAnimationFrame(animate)
}
animate()
};
function redraw() {
ctx.font="10px Sans-serif";
ctx.fillStyle="#333333";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.fillStyle="#00FFFF";
ctx.fillText(player1.count,100,50);
ctx.fillStyle="#FFFF00";
ctx.fillText(player2.count,100,70);
ctx.fillStyle="#EEEEEE";
ctx.fillText("PLAYER 1:", 40,50);
ctx.fillText("PLAYER 2:", 40,70);
}
function addPieceWithMouse() {
gameState = "playerMove";
}
function finishMove() {
gameState = "normal";
}
canvas.addEventListener("mousedown", addPieceWithMouse);
canvas.addEventListener("mouseup", finishMove);
var humanPlayer = function() {
this.count = 0;
this.acceptMove = function() {
this.count += Math.floor(Math.random()*2)
};
};
var computerPlayer = function() {
this.count = 0;
this.acceptMove = function() {
this.computerMove();
};
this.computerMove = function() {
this.count += Math.floor(Math.random()*2);
};
};
initGameLoop();
<canvas id="can"></canvas>
我有一个游戏循环,在每个玩家移动后重新绘制游戏板。我想暂停主循环并等待玩家在棋盘上放置一块棋子,即在 canvas 上触发鼠标按下事件。现在游戏循环继续重绘棋盘。有没有办法在继续循环之前等待玩家移动?
var initGameLoop = function() {
player1 = new humanPlayer();
player2 = new computerPlayer();
while (gameState) {
redraw();
player1.acceptMove();
redraw();
player2.acceptMove();
}
};
var humanPlayer = function() {
this.acceptMove = function() {
canvas.addEventListener("mousedown", addPieceWithMouse);
};
};
var computerPlayer = function() {
this.acceptMove = function() {
computerMove();
};
};
这显示了使用连续游戏循环的预期效果。当 gameState 为 playerMove
.
var canvas = document.getElementById("can");
var ctx = canvas.getContext('2d');
var gameState = "normal";
var initGameLoop = function() {
player1 = new humanPlayer();
player2 = new computerPlayer();
function animate () {
if(gameState === "playerMove") {
} else {
player1.acceptMove();
player2.acceptMove();
redraw();
}
requestAnimationFrame(animate)
}
animate()
};
function redraw() {
ctx.font="10px Sans-serif";
ctx.fillStyle="#333333";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.fillStyle="#00FFFF";
ctx.fillText(player1.count,100,50);
ctx.fillStyle="#FFFF00";
ctx.fillText(player2.count,100,70);
ctx.fillStyle="#EEEEEE";
ctx.fillText("PLAYER 1:", 40,50);
ctx.fillText("PLAYER 2:", 40,70);
}
function addPieceWithMouse() {
gameState = "playerMove";
}
function finishMove() {
gameState = "normal";
}
canvas.addEventListener("mousedown", addPieceWithMouse);
canvas.addEventListener("mouseup", finishMove);
var humanPlayer = function() {
this.count = 0;
this.acceptMove = function() {
this.count += Math.floor(Math.random()*2)
};
};
var computerPlayer = function() {
this.count = 0;
this.acceptMove = function() {
this.computerMove();
};
this.computerMove = function() {
this.count += Math.floor(Math.random()*2);
};
};
initGameLoop();
<canvas id="can"></canvas>