【发布时间】:2013-08-31 18:32:30
【问题描述】:
我刚开始学习 javascript,我已经遇到了一些问题。我有一个非常简单的“游戏”,您可以用箭头键移动红色框并且有黑色背景。我看到了一些关于同一个问题的主题,有些人说做一个缓冲区,另一半说不做缓冲,因为你的浏览器会为你做。但无论如何,我只是认为我的代码有问题,因为它在闪烁,但它太简单了,我认为它不应该。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = 800;
canvas.height = 600;
var mySprite = {
x: 200,
y: 200,
width: 50,
height: 50,
color: '#c00'
};
var yvel = 0;
var xvel = 0 ;
var moved = false;
var mspeed = 15;
var keysDown = {};
window.addEventListener('keydown', function(e) {
keysDown[e.keyCode] = true;
});
window.addEventListener('keyup', function(e) {
delete keysDown[e.keyCode];
});
function update() {
if (37 in keysDown) {
moved = true;
if(xvel > -mspeed){
xvel -= 0.5;
}
}
if (38 in keysDown) {
moved = true;
if(yvel > -mspeed){
yvel -= 0.5
}
}
if (39 in keysDown) {
moved = true;
if(xvel < mspeed){
xvel += 0.5
}
}
if (40 in keysDown) {
moved = true;
if(yvel < mspeed){
yvel += 0.5
}
}
mySprite.x += xvel;
mySprite.y += yvel;
if(moved == false){
xvel = xvel * 0.95;
yvel = yvel * 0.95;
}
moved = false;
}
function render() {
ctx.fillStyle = '#000';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = mySprite.color;
ctx.fillRect(mySprite.x, mySprite.y, mySprite.width, mySprite.height);
}
function run() {
update();
render();
}
setInterval(run, 1000/60);
你可以在这里试试:w3school 只需复制我的代码并将其放入标签中并将“MyCanvas”名称更改为“canvas”
【问题讨论】:
-
我创建了一个 JSFiddle,但看不到那里闪烁:http://jsfiddle.net/8NDL7/。我正在使用 Chrome 进行测试。
-
好吧,我的电脑速度很慢:P 我尝试过使用铬和铬,两者的结果相同。
标签: javascript html5-canvas double-buffering