我正在玩Canvas,我在画布上对我的小家伙的'动画'有问题,当我向左按住时,他应该播放他的小动画,因为他在页面上掠过但是按住按钮时超时正在堆叠,因此他的动画变得一团糟。我怎么能控制setTimeouts
以便他看起来不那么傻,谢谢!
与运动有关的守则:
var playerMove = function(direction) {
if (direction === 'left') {
updatePlayer(0, 130, 100, 100, 100, 100, 100);
setTimeout(function() {
updatePlayer(100, 130, 100, 100, 100, 100);
}, 100);
setTimeout(function() {
updatePlayer(180, 130, 100, 100, 100, 100);
}, 200);
setTimeout(function() {
updatePlayer(100, 130, 100, 100, 100, 100);
}, 500);
setTimeout(function() {
updatePlayer(0, 130, 100, 100, 100, 100, 100);
}, 650);
} else if (direction === 'right') {
updatePlayer(0, 230, 100, 100, 100, 100, 100);
setTimeout(function() {
updatePlayer(100, 230, 100, 100, 100, 100);
}, 100);
setTimeout(function() {
updatePlayer(180, 230, 100, 100, 100, 100);
}, 200);
setTimeout(function() {
updatePlayer(100, 230, 100, 100, 100, 100);
}, 500);
setTimeout(function() {
updatePlayer(0, 230, 100, 100, 100, 100, 100);
}, 650);
}
};
function movePlayer(e) {
if (e.which === 37) {
active = true;
playerMove('left');
player.destX -= 2;
} else if (e.which === 39) {
active = true;
playerMove('right');
player.destX += 2;
}
}
document.addEventListener('keydown', function(e) {
movePlayer(e);
});
答案 0 :(得分:0)
将超时存储在变量中,并在每次移动时使用clearTimeout。 在这种情况下,更好的用法是使用单个间隔,并清除keyup事件的间隔。
[编辑]
有间隔和玩家动作的示例,只需要控制动画时间。
var playerMovementInterval = null;
function movePlayerLeft () {
var actions = [
[0, 130, 100, 100, 100, 100, 100],
[100, 130, 100, 100, 100, 100],
[180, 130, 100, 100, 100, 100],
[100, 130, 100, 100, 100, 100],
[0, 130, 100, 100, 100, 100, 100]
];
var index = 0;
clearInterval(playerMovementInterval);
playerMovementInterval = setInterval(function() {
updatePlayer.apply(window, actions[index]);
index++;
if (index > actions.length-1) clearInterval(playerMovementInterval);
}, 200);
}
var playerMove = function(direction) {
if (direction === 'left') {
movePlayerLeft();
} else if (direction === 'right') {
.....
答案 1 :(得分:0)
您可以在上次超时中将active设置为false,并且只有在调用move()时才调用move()...