如何解决更新时图形短暂闪烁
我在这里有点超出我的深度。这里的社区似乎很有帮助,所以我希望我们能一起解决我遇到的问题。
我正在为 Windows PC 开发游戏,语言是 Javascript。我正在使用一个动态更新角色的插件。
不幸的是,这个插件的创建者放弃了这个插件,所以由于它尚未完成,我预计它的部分内容会有点笨拙。但它实际上工作得很好,并使用分层复合系统成功更新了我的角色,使用图像动态更新/分层他们的 png spritesheet 文件,例如头发、衣服等,放在我的另一个文件夹中。 所以至少困难的部分已经解决了!
-
我遇到的第一个问题是我的角色的图形在更新时会短暂闪烁(有一两帧丢失),并且在游戏中向它们添加了额外的层。向其中添加图层时,这种闪烁不会一直发生,但有时会发生,我不知道为什么。
-
另一个问题:当图形更新时,角色的精灵表也会在屏幕角落闪烁几帧,然后消失。幸运的是,如果我以较低的分辨率玩游戏,角落里的 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 举报,一经查实,本站将立刻删除。