微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新时图形短暂闪烁

如何解决更新时图形短暂闪烁

在这里有点超出我的深度。这里的社区似乎很有帮助,所以我希望我们能一起解决我遇到的问题。

我正在为 Windows PC 开发游戏,语言是 Javascript。我正在使用一个动态更新角色的插件

不幸的是,这个插件的创建者放弃了这个插件,所以由于它尚未完成,我预计它的部分内容会有点笨拙。但它实际上工作得很好,并使用分层复合系统成功更新了我的角色,使用图像动态更新/分层他们的 png spritesheet 文件,例如头发、衣服等,放在我的另一个文件夹中。 所以至少困难的部分已经解决了!

  1. 我遇到的第一个问题是我的角色的图形在更新时会短暂闪烁(有一两帧丢失),并且在游戏中向它们添加了额外的层。向其中添加图层时,这种闪烁不会一直发生,但有时会发生,我不知道为什么。

  2. 一个问题:当图形更新时,角色的精灵表也会在屏幕角落闪烁几帧,然后消失。幸运的是,如果我以较低的分辨率玩游戏,角落里的 spritesheet 闪烁是不可见的,但是如果游戏是在 1920x1080 或更大的屏幕上玩的,它就可以看到......我很想知道为什么会这样以及是否可以隐藏它。

我现在正在查看代码,如果这对解决问题更有帮助,我想与您分享,但我不确定在哪里查看。我当然很乐意把它全部贴出来,但有 2000 行代码!我不确定在此处发布那么多行代码是否令人不悦,所以我更愿意先询问。如果数量太多,如果我们可以缩小问题的范围,我可以尝试发布相关内容!提前感谢您的阅读!真的希望我能解决这个问题,因为我肩上的担子很重!

编辑:从你到目前为止所说的来看,一些代码肯定会有所帮助。但肯定不是 2000 行,这是可以理解的!这是我认为可能与我遇到的问题最相关的一小部分...

图像的组合方式:

Echomap_Processor.prototype.combineImagesLayer = function(bmp,imgLayerA,imgLayerE) {
this.combiningStarted = true;
var imgLayer = new Array();
for (var i = 0,len = imgLayerA.length; i < len; i++) {
    imgLayer.push( imgLayerA[i] );
}
for (var i = 0,len = imgLayerE.length; i < len; i++) {
    imgLayer.push( imgLayerE[i] );
}
for (var i = 0,len = imgLayer.length; i < len; i++) {
    var hue = 0;
    var dpath;
    var imgLocal = imgLayer[i]; //Echomap_CCG_ImgObject'
    dpath = 'img/composite/' + imgLayer[i].filename();
    imgLocal.setdpath(dpath);
    hue = imgLocal.hue();
    var toneR = imgLocal.toneR();
    var toneG = imgLocal.toneG();
    var toneB = imgLocal.toneB();
    Echomap.Utils.log('combineImagesLayer','dpath',dpath,4);

    var tLayer;
    tlayer = ImageManager.loadnormalBitmapEcho3b(imgLocal);//dpath,hue,toneR,toneG,toneB);
    if (tlayer.isError()) {
        this.composingImgX = false;
        throw new Error('Failed to load: ' + tlayer.url);
    }
    if (!tlayer.isReady()) {
        this.composingImgX = false;
        Echomap.Utils.log('combineImagesLayer','WARN: bitmap not ready! (WHY?)!!',tlayer.url);
        return; //done = false;
        //throw new Error('Failed to load: ' + tlayer.url);
    }
    if( toneR!=0 || toneG!=0 || toneB!=0 )
        tlayer.adjustTone(toneR,toneB);
    var w = tlayer.width;
    var h = tlayer.height;
    Echomap.Utils.log('combineImagesLayer','bitmap ready',tlayer.url);
    bmp.blt(tlayer,w,h,0);
    /*tLayer.addLoadListener(function () {
        //blt ( source,sx,sy,sw,sh,dx,dy,[dw=sw],[dh=sh] )
        bmp.blt(tLayer,tLayer.width,tLayer.height,0);
    });*/
}
this.combiningLvlStarted = false;

};

图片的加载方式:

Echomap_Processor.prototype.loadImagesLayer = function(bmp,imgLayer) {
//Echomap.Utils.log('loadImagesLayer','Called');
//Array imgLayer
for (var i = 0,len = imgLayer.length; i < len; i++) {
    var hue = 0;
    var imageLocal = imgLayer[i];
    //var dpath = 'img/composite/' + imgLayer[i];
    var dpath = 'img/composite/' + imageLocal.filename();
    hue   = imageLocal.hue();
    imageLocal.setdpath(dpath);
    if(imageLocal) {
        Echomap.Utils.log('loadImagesLayer',4 );
        //var tLayer = ImageManager.loadnormalBitmap(dpath,hue);
        var tLayer = ImageManager.loadnormalBitmapEcho3(imageLocal);
    }
    /*tLayer.addLoadListener(function () {
        //blt ( source,0);
    });
    */
}
//Echomap.Utils.log('loadImagesLayer','Done');

};

来源:https://github.com/echomap/rpgmvplugins(这是插件的来源)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。