首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >globalCompositeOperation在背景上绘制白色

globalCompositeOperation在背景上绘制白色
EN

Stack Overflow用户
提问于 2015-05-26 02:38:57
回答 1查看 887关注 0票数 1

我在globalCompositeOperation画布的javascript中遇到了问题。

https: //jsfiddle.net/6j51kxeh/

我使用的是“目的地”,在心灵的精灵中画一个黑色的正方形,所以当玩家错过了那颗心时,它会显示出来。它把黑色的心画得很好,但它画的比其他的东西都要白。如果您将globalCompositeOperation行注释掉,您将看到它是在其他事物之上绘制的(只是来自同一雪碧表的一组随机的精灵)。谢谢你的帮助。

我也有困难,只是链接到jsfiddle,我已经玩够了。

代码语言:javascript
复制
var canvas = document.createElement("canvas");    

canvas.height = window.innerHeight;
canvas.width  = window.innerWidth;

var scale = 4;

document.body.appendChild(canvas);

var draw = canvas.getContext("2d");

draw.imageSmoothingEnabled = false;
draw.mozImageSmoothingEnabled = false;
draw.oImageSmoothingEnabled = false;
draw.webkitImageSmoothingEnabled = false;

var assetsToLoad = [];
var assetsLoaded = 0;

var sprites = new Image();
sprites.onload = loadHandler;
sprites.src = "https://dl.dropboxusercontent.com/u/38825680/Site/images/sprites.png";
assetsToLoad.push(sprites);


function loadHandler() {
    assetsLoaded++;
    if(assetsLoaded === assetsToLoad.length) {
        console.log(assetsLoaded + " asset[s] loaded");

        Draw();
    }
};

function Draw() {
    draw.save();
    draw.scale(scale,scale);

    draw.drawImage(sprites,0,64,64,64,0,0,64,64);
    // draw.drawImage(sprites,112,80,16,16,0,0,16,16);
    draw.fillStyle = "black";
    draw.fillRect(0,0,16,16);

    //draw.globalCompositeOperation = "destination-in";

    draw.drawImage(sprites,96,48,16,16,0,0,16,16);


    draw.restore();
}
EN

回答 1

Stack Overflow用户

发布于 2015-05-26 03:25:17

destination-in合成具有破坏性,因为它将擦除画布上的所有内容,除非新的(心脏)与任何现有的不透明像素重叠。所以这种形式的合成不太可能是你所需要的。

澄清:你想要在另一个精灵图像上画出心脏精灵,然后从心脏被添加到的另一个精灵图像中清除那个精灵?

如果是,则:

  • 若要添加心脏,请将心脏精灵画在另一个精灵之上。
  • 要清除心灵,只需重新画另一个精灵。

示例代码和演示:

代码语言:javascript
复制
var canvas = document.createElement("canvas");    

canvas.height = 640;//window.innerHeight;
canvas.width  = 960;//window.innerWidth;

var scale = 4;

document.body.appendChild(canvas);

var draw = canvas.getContext("2d");

draw.imageSmoothingEnabled = false;
draw.mozImageSmoothingEnabled = false;
draw.oImageSmoothingEnabled = false;
draw.webkitImageSmoothingEnabled = false;

var assetsToLoad = [];
var assetsLoaded = 0;

var sprites = new Image();
sprites.onload = loadHandler;

sprites.src = "https://dl.dropboxusercontent.com/u/38825680/Site/images/sprites.png";
assetsToLoad.push(sprites);


function loadHandler() {
  assetsLoaded++;
  if(assetsLoaded === assetsToLoad.length) {
    console.log(assetsLoaded + " asset[s] loaded");

    draw.scale(scale,scale);
    Draw();
  }
};

function Draw() {
  draw.drawImage(sprites,0,64,64,64,0,0,64,64);
}



function addHeart(x,y){
  draw.fillStyle = "black";
  draw.fillRect(x,y,16,16);
  draw.drawImage(sprites,96,48,16,16,x,y,16,16);
}

function removeHeart(x,y,spriteX,spriteY){
  draw.clearRect(x,y,16,16);
  draw.drawImage(sprites,spriteX,spriteY+64,16,16,x,y,16,16)
}

$('#add').click(function(){
  addHeart(0,0);
});

$('#remove').click(function(){
  removeHeart(0,0,0,0);
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button id=add>Add heart</button>
<button id=remove>Remove heart</button>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档