Javascript 从HTML5画布图形中删除辉光?
如果我在黑色背景上画一个绿色圆圈,然后用黑色画同一个圆圈,后面会留下一个绿色阴影/光晕。圆圈实际上并没有被擦除 如何使其再次变为纯黑色并消除辉光 我尝试了Javascript 从HTML5画布图形中删除辉光?,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,如果我在黑色背景上画一个绿色圆圈,然后用黑色画同一个圆圈,后面会留下一个绿色阴影/光晕。圆圈实际上并没有被擦除 如何使其再次变为纯黑色并消除辉光 我尝试了context.shadowColor=“transparent” 以下是一个片段: context.beginPath(); context.arc(x-1, y-2, 2, 0, 2*Math.PI); context.fillStyle = "#FF0000"; //context.strokeStyle = "#FF0000"; //c
context.shadowColor=“transparent”代码>
以下是一个片段:
context.beginPath();
context.arc(x-1, y-2, 2, 0, 2*Math.PI);
context.fillStyle = "#FF0000";
//context.strokeStyle = "#FF0000";
//context.stroke();
context.fill();
context.beginPath();
context.arc(x-1, y-2, 2, 0, 2*Math.PI);
context.fillStyle = "#000000";
//context.strokeStyle = "#000000";
//context.stroke();
context.fill();
以下是完整的对象:
如何清除画布。
从你给你的图像来看,你想写一个游戏或某种动画
完成游戏和动画的一般方法是每帧重新绘制整个游戏屏幕。这大大简化了渲染引擎的设计。通过简单地更改绘制顺序,可以轻松地绘制一个对象。要让某些东西消失,就不要渲染它
我假设您知道如何加载图像
清除屏幕
有几种方法可以清除屏幕
// assuming ctx is the 2d Context and width and height are the canvas width and height.
ctx.clearRect(0, 0, width, height);
或者用矩形填充屏幕
var backgroundColour = "#000";
ctx.fillStyle = backgroundColour;
ctx.fillRect(0, 0, width, height);
或者使用背景图像
var backgroundImage = new Image();
backgroundImage.src = "backgroundImage URL";
// then wait for image to load.
// then
ctx.drawImage(backgroundImage, 0, 0, width, height);
绘制精灵
现在您可以绘制图形了。同样,有很多方法可以做到这一点。一种方法是保留所有对象的列表,并在屏幕清除后一次性绘制所有对象
// create or load a game sprite (image)
var gameSprite = new Image();
gameSprite.src = "gameSprite URL";
// create a list of sprites.
var mySprites = [
{x : 10, y : 10, image : gameSprite}, // sprite 1
{x : 30, y : 60, image : gameSprite}, // sprite 2
{x : 70, y : 40, image : gameSprite} // sprite 3
];
// itterate the list and draw each sprite one at a time.
function renderSprites (spriteList) {
var i,len,s;
len = spriteList.length;
for (i = 0; i < len; i++) {
s = spriteList[i];
ctx.drawImage(s.image, s.x, s.y);
}
}
这将以每秒60帧的速度运行,可以轻松处理100多个精灵(除了最基本的设备外)如何清除画布。
从你给你的图像来看,你想写一个游戏或某种动画
完成游戏和动画的一般方法是每帧重新绘制整个游戏屏幕。这大大简化了渲染引擎的设计。通过简单地更改绘制顺序,可以轻松地绘制一个对象。要让某些东西消失,就不要渲染它
我假设您知道如何加载图像
清除屏幕
有几种方法可以清除屏幕
// assuming ctx is the 2d Context and width and height are the canvas width and height.
ctx.clearRect(0, 0, width, height);
或者用矩形填充屏幕
var backgroundColour = "#000";
ctx.fillStyle = backgroundColour;
ctx.fillRect(0, 0, width, height);
或者使用背景图像
var backgroundImage = new Image();
backgroundImage.src = "backgroundImage URL";
// then wait for image to load.
// then
ctx.drawImage(backgroundImage, 0, 0, width, height);
绘制精灵
现在您可以绘制图形了。同样,有很多方法可以做到这一点。一种方法是保留所有对象的列表,并在屏幕清除后一次性绘制所有对象
// create or load a game sprite (image)
var gameSprite = new Image();
gameSprite.src = "gameSprite URL";
// create a list of sprites.
var mySprites = [
{x : 10, y : 10, image : gameSprite}, // sprite 1
{x : 30, y : 60, image : gameSprite}, // sprite 2
{x : 70, y : 40, image : gameSprite} // sprite 3
];
// itterate the list and draw each sprite one at a time.
function renderSprites (spriteList) {
var i,len,s;
len = spriteList.length;
for (i = 0; i < len; i++) {
s = spriteList[i];
ctx.drawImage(s.image, s.x, s.y);
}
}
这将以每秒60帧的速度运行,可以轻松处理100多个精灵(除了最基本的设备)@adeneo我已经这样做了,但我不希望其他对象也被删除!!这是由抗锯齿造成的,您必须尝试另一种方法,例如清除整个画布并重新绘制图像,或者使用多个画布。可以做的事情不多。它是抗锯齿的结果,以及如何将其转换为画布的位深度。您可以复制画布的部分,然后在需要删除已绘制的内容时绘制保存的副本。或者你可以在每次更改显示内容时绘制所有内容。你能提供一个JSFIDLE链接吗?@adeneo我已经这样做了,但我不希望其他对象也被删除!!这是由抗锯齿造成的,您必须尝试另一种方法,例如清除整个画布并重新绘制图像,或者使用多个画布。可以做的事情不多。它是抗锯齿的结果,以及如何将其转换为画布的位深度。您可以复制画布的部分,然后在需要删除已绘制的内容时绘制保存的副本。或者,您可以在每次更改显示内容时绘制所有内容。是否可以提供JSFIDLE链接?