我在这里有点超出我的深度。这里的社区似乎很有帮助,所以我希望我们能一起解决我遇到的问题。
我正在为 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,toneG,toneB);
var w = tlayer.width;
var h = tlayer.height;
Echomap.Utils.log('combineImagesLayer', 'bitmap ready', tlayer.url);
bmp.blt(tlayer, 0, 0, w, h, 0, 0);
/*tLayer.addLoadListener(function () {
//blt ( source , sx , sy , sw , sh , dx , dy , [dw=sw] , [dh=sh] )
bmp.blt(tLayer, 0, 0, tLayer.width, tLayer.height, 0, 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', 'dpath', dpath, 4 );
//var tLayer = ImageManager.loadNormalBitmap(dpath, hue);
var tLayer = ImageManager.loadNormalBitmapEcho3(imageLocal);
}
/*tLayer.addLoadListener(function () {
//blt ( source , sx , sy , sw , sh , dx , dy , [dw=sw] , [dh=sh] )
bmp.blt(tLayer, 0, 0, tLayer.width, tLayer.height, 0, 0);
});
*/
}
//Echomap.Utils.log('loadImagesLayer', 'Done');
};
来源:https ://github.com/echomap/rpgmvplugins (这是插件的来源)