0

我正在尝试制作游戏,并且我有一些会相互重叠的精灵。当使用 清除精灵的区域时clearRect,它后面的任何精灵都会消失,就好像前景精灵不透明一样。但是,如果我尝试使用 保存和恢复精灵背后的区域get/putImageData,就会开始发生奇怪的事情。各个地方的部分精灵没有“未绘制”,其他部分似乎被分解并在几码之外,其他精灵被涂抹。这是一个代码块:

var anim = function()
{
    if(gtiming < Date.now() % 1000)
        timing = (Date.now() % 1000) - gtiming;

    if(stage == 1)
    {
        ugcnt = ugcnt + timing;

        if(mleft == true)
        {
            acc = acc - 0.25;
        }
        else if(mright == true)
        {
            acc = acc + 0.25;
        }
        else
        {
            if(acc < 0 || acc > 0) acc = acc / 1.1;
        }
        if(kyx < 0)
        {
            kyx = 0;
            acc = -acc;
        }
        else if(kyx > 432)
        {
            kyx = 432;
            acc = -acc;
        }
        if(kyblk != null)
            xbios.putImageData(kyblk, kyx, 155);
        kyblk = null;
        kyx = kyx + acc;
        kyblk = xbios.getImageData(kyx, 155, 208, 245);
        xbios.drawImage(kyk[Math.floor(kyf)], 0, 0, 416, 490, kyx, 155, 208, 245);

        if(ugcnt > mus[r][1] * 1000)
        {
            ugcnt = 0;
            ugobj.push(new ugnaut(Math.floor(Math.random() * 640), -208, "L"));
        }
        ugobj.forEach(testug);


        kyf = kyf + ((timing / 1000) * (mus[r][1] * 240));
        if(kyf > 119)
            kyf = kyf - 119;
    }

    gtiming = Date.now() % 1000;
    if(stage > 0)
        requestAnimationFrame(anim);
}
function ugnaut(x, y, f)
{
    this.x = x;
    this.y = y;
    this.f = f;
    this.fr = 0;
    this.blk = null;

    this.set=function()
    {
        if(this.blk != null)
            xbios.putImageData(this.blk, this.x, this.y);
        this.blk = null;
        if(f == "L")
        {
            this.y++;
            this.blk = xbios.getImageData(this.x, this.y, 179, 208);
            xbios.drawImage(ugf[this.fr], 0, 0, 179, 208, this.x, this.y, 179, 208);
            this.fr++;
            if(this.fr > 44) this.fr = 0;
        }
    }
    this.getx = function()
    {
        return this.x;
    }
    this.gety = function()
    {
        return this.y;
    }
    this.getf = function()
    {
        return this.f;
    }
}
function testug(item, index)
{
    if(item.getx() > -180 && item.getx() < 640 && item.gety() > -224 && item.gety() < 400)
    {
        item.set();
    }
    else
    {
        item = null;
        ugobj.splice(index, 1);
    }
}

对于那些想知道的人,是的,我确实调用了 Canvas 2D Context xbios。当时只是觉得这是一个有趣的名字。无论如何,根据我的理解,this在“对象”内部,ugnaut它所持有的值将是该对象实例的本地值,所以我假设每个ugnaut人都会在 中保存自己的背景信息this.blk,但我错了吗?我应该使用哪些其他方法?

4

0 回答 0