gpt4 book ai didi

javascript - HTML5 Canvas 图像移动闪烁

转载 作者:行者123 更新时间:2023-12-03 11:48:42 26 4
gpt4 key购买 nike

在 Canvas 中,有一个图像,它会随着箭头键的事件而移动。但它在 Firefox 中闪烁,在 chrome 和 ie 上运行良好。

我不想要像仅清除 Canvas 部分这样的解决方案,因为我还在 Canvas 中添加了其他内容。

下面是我的代码:

var
velY = 0,
velX = 0,
speed = 2,
friction = 0.90,
keys = [],

canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
playerDirection="img/player/player_back.png";

function update() {

if (keys[38]) {
if (velY > -speed) {
velY--;
playerDirection="img/player/player_back.png";
}
}

if (keys[40]) {
if (velY < speed) {
velY++;
playerDirection="img/player/player_front.png";
}
}
if (keys[39]) {
if (velX < speed) {
velX++;
playerDirection="img/player/player_right.png";
}
}
if (keys[37]) {
if (velX > -speed) {
velX--;
playerDirection="img/player/player_left.png";
}
}

velY *= friction;
y += velY;
velX *= friction;
x += velX;

if (x >= canvas.width - player.width) {
x = canvas.width - player.width;
} else if (x <= 5) {
x = 5;
}

if (y > canvas.height - player.height) {
y = canvas.height - player.height;
} else if (y <= 5) {
y = 5;
}

ctx.clearRect(0, 0, canvas.width, canvas.height);
playerObj = new Image();
playerObj.onload = function()
{
ctx.drawImage(playerObj, x, y);
};
playerObj.src = playerDirection;


}

update();


function handlerKeyDown(e)
{
keys[e.keyCode] = true;
}

function handlerKeyUp(e) {
keys[e.keyCode] = false;
}

提前致谢。

最佳答案

这就是我所说的“缓存图像”的意思:

var images = {}; // This will contain the Image objects
// Other definitions...

function update() {

if (keys[38]) {
if (!images.back) {
// The image object hasn't been defined yet.
images.back = new Image();
images.back.src = "img/player/player_back.png";
}
playerObj = images.back;
}
// Other checks on the pressed keys
// ...

// Computations on the position...

if (!playerObj.naturalWidth) {
// If naturalWidth/Height is 0, then the image hasn't been loaded yet.
// We update the onload listener to draw in the right position.
playerObj.onload = function() {
ctx.drawImage(playerObj, x, y);
};
// The image has already been loaded, so we just draw it
} else ctx.drawImage(playerObj, x, y);
}

(作为对您的代码的警告,您似乎想要处理多个按下的键,但上-下-右-左序列中的最后一个总是“胜过”其他键。这真的是您想要的吗?)

关于javascript - HTML5 Canvas 图像移动闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com