查看: 4983|回复: 2

[有事请教] 截图存档卡顿问题(已解决)

[复制链接]
梦石
20
星屑
13965
在线时间
1744 小时
注册时间
2017-1-12
回帖
1667

MZ评测员开拓者

发表于 2019-5-30 07:39:22 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 火锅深处 于 2019-5-30 09:53 编辑

用的是下面这个截图存档,存五个档的话差不多有个一两秒才能载入存档或者读档的画面,大佬们知道怎么解决吗?
===================================================
已自行解决~顺着另外一个截图存档摸到了saveload高速化插件。
http://ytomy.sakura.ne.jp/tkool/ ... ate_file_scene.html

[pre lang="javascript"]//-----------------------------------------------------------------------------------
//sai_Scenefile.js
//-----------------------------------------------------------------------------------
/*:ja
* @plugindesc 補助ウインドウを使ったSS付セーブ画面
*
* @param bgBitmapFile
* @desc セーブ/ロード画面背景にするビットマップファイルです。
* img/pictures に置いてください。
* @default
*
*
* @param List X
* @desc セーブファイルリストの位置Xです。
* @default 100
*
* @param List Y
* @desc セーブファイルリストの位置Yです。
* @default 120
*
* @param List Width
* @desc セーブファイルリストのウインドウ幅です。
* @default 280
*
* @param List Height
* @desc セーブファイルリストのウインドウ高さです。
* @default 380
*
* @param List MaxItems
* @desc セーブファイルリストの数です。
* @default 20
*
* @param List MaxCols
* @desc セーブファイルリストの列数です。
* @default 2
*
* @param List Opacity
* @desc セーブファイルリストのウインドウ透過度です。
* @default 0
*
* @param List Font Size
* @desc セーブファイルリストのフォントサイズです。
* @default 20
*
* @param Help X
* @desc ヘルプのウインドウ位置Xです。
* @default 100
*
* @param Help Y
* @desc ヘルプのウインドウ位置Yです。
* @default 50
*
* @param Help Width
* @desc ヘルプのウインドウ幅です。
* @default 580
*
* @param Help Opacity
* @desc ヘルプのウインドウ透過度です。
* @default 0
*
* @param Help Font Size
* @desc ヘルプのフォントサイズです。
* @default 18
*
* @param State X
* @desc セーブ内容の位置Xです。
* @default 380
*
* @param State Y
* @desc セーブ内容の位置Yです。
* @default 120
*
* @param State Width
* @desc セーブ内容のウインドウ幅です。
* @default 300
*
* @param State Height
* @desc セーブ内容のウインドウ高さです。
* @default 370
  
* @param State Opacity
* @desc セーブ内容のウインドウ透過度です。
* @default 0
*
* @param State Font Size
* @desc セーブ内容のフォントサイズです。
* @default 18
*
* @param SS X
* @desc スクリーンショットの表示位置Xです。
* @default 0
*
* @param SS Y
* @desc スクリーンショットの表示位置Yです。
* @default 0
*
* @param SS Percent
* @desc スクリーンショットの圧縮率です。
*この数字が大きいほどデータが重くなります。
* @default 0.30
*
* @param Savetime X
* @desc セーブ日時の表示位置Xです。
* @default 0
*
* @param Savetime Y
* @desc セーブ日時の表示位置Yです。
* @default 190
*
* @param Location TEXT
* @desc マップ名の名称です、制御文字が使えます。
* @default 地点:
*
* @param Location TEXT X
* @desc マップ名の名称表示位置Xです。
* @default 0
*
* @param Location TEXT Y
* @desc マップ名の名称表示位置Yです。
* @default 220
*
* @param Location X
* @desc マップ名の表示位置Xです。
* @default 0
*
* @param Location Y
* @desc マップ名の表示位置Yです。
* @default 215
*
* @param Gold TEXT
* @desc 所持金の名称です、制御文字が使えます。
* @default 持有金额:
  *
* @param Gold TEXT X
* @desc 所持金の名称表示位置Xです。
* @default 0
*
* @param Gold TEXT Y
* @desc 所持金の名称表示位置Yです。
* @default 245
*
* @param Gold X
* @desc 所持金の表示位置Xです。
* @default 0
*
* @param Gold Y
* @desc 所持金の表示位置Yです。
* @default 240
*
* @param Member X
* @desc パーティメンバーの表示位置Xです。
* @default 800
*
* @param Member Y
* @desc パーティメンバーの表示位置Yです。
* @default 500
*       
* @help このプラグインには、プラグインコマンドはありません。
*
* 制作者:sairi [Twitter@sairi55]
* SPECIALTHANKS
* 翠様、尾角つの様
* ツクマテお呼びTwitterで何時も構ってくれるツクラーの皆様
*  
* 無責任に行きたいので他のプラグインとの競合等により
* バグ、エラーが発生した場合の対応、責任は取れません。
* 改変がし易いように説明も入れたつもりですが
* 全てご使用は自己責任でお願い致します。
*  
* 使用規約:
* ジャンル無制限、改変可
* 素材自体の販売禁止
* ゲームに含めての再配布は可
*  
* クレジットの記載は強制しませんが入れてくれると嬉しいです。
* あと教えてくれるともっと嬉しいです。
* 以上宜しくお願いします。
*  
*  
*/



(function() {
        var Imported = Imported || {};
  Imported.sai_Scenefile = true;
  var sai = sai || {};

        var parameters = PluginManager.parameters('sai_Scenefile');
    var bgBitmapFile = parameters['bgBitmapFile'] || '';
        sai.list_x = Number(parameters['List X'] || 100);       
        sai.list_y = Number(parameters['List Y'] || 170);       
        sai.list_width = Number(parameters['List Width'] || 280);
        sai.list_height = Number(parameters['List Height'] || 380);
        sai.list_maxItems = Number(parameters['List MaxItems'] || 20);       
        sai.list_maxcols = Number(parameters['List MaxCols'] || 2);       
    sai.list_opacity = Number(parameters['List Opacity'] || 0);       
    sai.list_fontsize = Number(parameters['List Font Size'] || 20);       
        sai.help_x = Number(parameters['Help X'] || 100);       
        sai.help_y = Number(parameters['Help Y'] || 100);       
        sai.help_width = Number(parameters['Help Width'] || 580);
        sai.help_opacity = Number(parameters['Help Opacity'] || 0);       
  sai.help_fontsize = Number(parameters['Help Font Size'] || 18);       
        sai.state_x = Number(parameters['State X'] || 380);       
        sai.state_y = Number(parameters['State Y'] || 170);       
        sai.state_width = Number(parameters['State Width'] || 300);
        sai.state_height = Number(parameters['State Height'] || 380);       
        sai.state_opacity = Number(parameters['State Opacity'] || 0);       
        sai.state_fontsize = Number(parameters['State Font Size'] || 18);       
        sai.ss_x = Number(parameters['SS X'] || 0);       
        sai.ss_y = Number(parameters['SS Y'] || 0);       
        sai.ss_percent = Number(parameters['SS Percent'] || 0.30);       
        sai.savetime_x = Number(parameters['Savetime X'] || 0);       
        sai.savetime_y = Number(parameters['Savetime Y'] || 190);
        sai.location_text = (parameters['Location TEXT'] || '地点:');               
        sai.locationtext_x = Number(parameters['Location TEXT X'] || 0);       
        sai.locationtext_y = Number(parameters['Location TEXT Y'] || 220);       
        sai.location_x = Number(parameters['Location X'] || 0);       
        sai.location_y = Number(parameters['Location Y'] || 215);       
        sai.gold_text = (parameters['Gold TEXT'] || '金钱:');
        sai.goldtext_x = Number(parameters['Gold TEXT X'] || 0);       
        sai.goldtext_y = Number(parameters['Gold TEXT Y'] || 245);       
        sai.gold_x = Number(parameters['Gold X'] || 0);       
        sai.gold_y = Number(parameters['Gold Y'] || 240);
        sai.members_x = Number(parameters['Members X'] || 80);       
        sai.members_y = Number(parameters['Members Y'] || 340);       
               
       
//Bitmap-----------------------------------------------------------------------------
if (!Bitmap.prototype.save){
    Bitmap.prototype.toDataURL = function(){
// jpegとPNGサイズが小さくなる方を返す
           var png = this._canvas.toDataURL('image/png');
            var jpeg = this._canvas.toDataURL('image/jpeg');
            return (png.length < jpeg.length) ? png : jpeg;

    };
}

//DataManager-----------------------------------------------------------------------------
var DM_LSImage = DataManager.loadSavefileImages;
DataManager.loadSavefileImages = function(info){
    DM_LSImage.call(this, info);
    if (info.snapUrl){
                var DH = Decrypter.hasEncryptedImages;//暗号化してるかどうかのフラグを一旦適当な変数に保存
                Decrypter.hasEncryptedImages = false;//その場合一時的にfalse
         ImageManager.loadNormalBitmap(info.snapUrl);
                Decrypter.hasEncryptedImages = DH;    //フラグを戻す
    }
            if (info.characters) {
        for (var i = 0; i < info.characters.length; i++) {
            ImageManager.loadCharacter(info.characters[0]);
        }
    }
};

var DM_MSInfo = DataManager.makeSavefileInfo;//セーブファイルの内容
DataManager.makeSavefileInfo = function(){
var info = DM_MSInfo.call(this);       
        info.location = $dataMap.displayName != "" ? $dataMap.displayName : $dataMapInfos[$gameMap.mapId()].name;
   info.level = $gameParty.exists() ? $gameParty.members()[0].level : null;
        info.gold = $gameParty.gold();        
    info.map_id = $gameMap.mapId();
       
       
        var today = new Date();
    var dateOptions = {
         year: "numeric",
         month: "2-digit",
         day: "2-digit",
         hour: "2-digit",
         minute: "2-digit"
};
    info.savetime = today.toLocaleDateString("ja-JP",dateOptions)

  var bitmap = this.makeSavefileBitmap();
    if (bitmap){
        info.snapUrl = bitmap.toDataURL();
    }
    return info;
};


DataManager.makeSavefileBitmap = function(){//セーブファイル用のビットマップを作成
    var bitmap = $gameTemp.getSavefileBitmap();
    if (!bitmap){
        return null;
    }
    var scale = Number(sai.ss_percent);
    var newBitmap = new Bitmap(bitmap.width * scale, bitmap.height * scale);
    newBitmap.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, newBitmap.width, newBitmap.height);
    return newBitmap;
};

//Game_Temp-----------------------------------------------------------------------------
var Game_Temp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function(){
    Game_Temp_initialize.call(this);
    this._savefileBitmap = null;
};

Game_Temp.prototype.setSavefileBitmap = function(bitmap){
    this._savefileBitmap = bitmap;
};

Game_Temp.prototype.getSavefileBitmap = function(){
    if (this._savefileBitmap){
        return this._savefileBitmap;
    }
    else{
        return SceneManager._backgroundBitmap;
    }
};

//---------------------------------------------------------------------------------
Window_SavefileList.prototype.maxItems = function() {
    return Number(sai.list_maxItems);
};
Window_SavefileList.prototype.maxCols = function() {
    return Number(sai.list_maxcols); 
};
Window_SavefileList.prototype.standardFontSize = function() {
    return Number(sai.list_fontsize);
};
Window_Help.prototype.standardFontSize = function() {
    return Number(sai.help_fontsize);
};
SceneManager.snapForBackground = function() {
    this._backgroundBitmap = this.snap(); //モーションブラーを取り外す

};
//----------------------------------------------------------------------------------
    var _Scene_File_create = Scene_File.prototype.create;
    Scene_File.prototype.create = function() {
        _Scene_File_create.call(this);
                //ステータスウインドウの配置
        this._statusWindow = new Window_SavefileStatus(Number(sai.state_x),Number(sai.state_y),Number(sai.state_width), Number(sai.state_height));
        this._statusWindow.setMode(this.mode());
        this._listWindow.statusWindow = this._statusWindow;
                // セーブ画面全てのウインドウを透明にする
                this._statusWindow.opacity = Number(sai.state_opacity);
                this._helpWindow.opacity = Number(sai.help_opacity);
        this._listWindow.opacity = Number(sai.list_opacity);
                //---------------------------------------
        this._listWindow.callUpdateHelp();
                //ヘルプウインドウの配置
                this._helpWindow.x = Number(sai.help_x);
                this._helpWindow.y = Number(sai.help_y);
                this._helpWindow.width = Number(sai.help_width);
        this.addWindow(this._statusWindow);
                this.addChildAt(this._helpWindow,2); //helpWindowの表示順位を入れ替える               
    };

    var _Scene_File_start = Scene_File.prototype.start;
    Scene_File.prototype.start = function() {
        _Scene_File_start.call(this);
        this._listWindow.ensureCursorVisible();
        this._listWindow.callUpdateHelp();
    };

Window_SavefileList.prototype.initialize = function(x, y, width, height) {
    Window_Selectable.prototype.initialize.call(this, Number(sai.list_x), Number(sai.list_y), Number(sai.list_width), Number(sai.list_height));
    this.activate();
    this._mode = null;
};
Window_SavefileList.prototype.itemHeight = function() {
    return this.padding * 1.8;
};

    var _Window_SavefileList_callUpdateHelp =
            Window_SavefileList.prototype.callUpdateHelp;
    Window_SavefileList.prototype.callUpdateHelp = function() {
        _Window_SavefileList_callUpdateHelp.call(this);
        if (this.active && this.statusWindow) {
            this.statusWindow.setId(this.index() + 1);
        }
    };

    function Window_SavefileStatus() {
        this.initialize.apply(this, arguments);
    }

    Window_SavefileStatus.prototype = Object.create(Window_Base.prototype);
    Window_SavefileStatus.prototype.constructor = Window_SavefileStatus;

    Window_SavefileStatus.prototype.initialize = function(x, y, width, height) {
        Window_Base.prototype.initialize.call(this, x, y, width, height);
        this._id = 1;
    };

    Window_SavefileStatus.prototype.setMode = function(mode) {
        this._mode = mode;
    };

    Window_SavefileStatus.prototype.setId = function(id) {
        this._id = id;
                                                this.contents.fontSize = Number(sai.state_fontsize);
        this.refresh();
    };
        Window_SavefileStatus.prototype.standardFontSize = function(id) {
        return  Number(sai.state_fontsize);
    };

    Window_SavefileStatus.prototype.refresh = function() {
        this.contents.clear();
    var id = this._id;
    var info = DataManager.loadSavefileInfo(id);
        var valid = DataManager.isThisGameFile(id);
    if (info){
        var rect = this.contents.rect;
        this.drawSnappedImage(info, rect, valid);
                this.drawFileId(id, rect.x, rect.y);
                this.drawContents(info, rect.x, valid);
    }
    };
       
//セーブステータス画面に表示させる名称と位置------------------------------------
//現状[ファイル名+ID、プレイ時間、地名、持ち金]、名称変更は''の中の文字で
    Window_SavefileStatus.prototype.drawFileId = function(id, x, y) {
                this.drawTextEx((sai.location_text) + ' ', Number(sai.locationtext_x), Number(sai.locationtext_y), 120);
                this.drawTextEx((sai.gold_text) + ' ', Number(sai.goldtext_x), Number(sai.goldtext_y), 120);
    };

      Window_SavefileStatus.prototype.drawContents = function(info, x, valid) {
        this.drawText(info.savetime, Number(sai.savetime_x), Number(sai.savetime_y), 200);
                if (info.location) {
                this.drawText(info.location, 100, Number(sai.location_y), 150);
                }
                if (info.level) {
                        this.drawText(TextManager.levelA + " " + info.level, Number(sai.level_x), Number(sai.level_y), 60);
                }
                if (typeof info.gold === 'number') { //値が数字の時に通る
                        this.drawText(info.gold + " " + TextManager.currencyUnit, 100, Number(sai.gold_y), 200);
                }


                if (valid) {
            this.drawPartyCharacters(info,Number(sai.members_x),Number(sai.members_y));
        }

    };

//ステータスウインドウに表示させるPTの詳細--------------------------------------
Window_SavefileStatus.prototype.drawPartyCharacters = function(info, x, y) {
    if (info.characters) {
        for (var i = 0; i < info.characters.length; i++) {
            var data = info.characters;
            this.drawCharacter(data[0], data[1], x + i * 48, y);
        }
    }
};
//セーブファイルリストの中身-------------------------------------------------
Window_SavefileList.prototype.drawItem = function(index) {
    var id = index + 1;
    var valid = DataManager.isThisGameFile(id);
    var info = DataManager.loadSavefileInfo(id);
    var rect = this.itemRectForText(index);
    this.resetTextColor();
    this.drawFileId(id, rect.x, rect.y);

};
//セーブファイルの画像を表示
Window_SavefileStatus.prototype.drawSnappedImage = function(info, rect, valid){
    if (!(valid && info.snapUrl)){
        return;
    }
  var DH = Decrypter.hasEncryptedImages;//暗号化してるかどうかのフラグを一旦適当な変数に保存
        Decrypter.hasEncryptedImages = false;//その場合一時的にfalse
    var bitmap = ImageManager.loadNormalBitmap(info.snapUrl);
        Decrypter.hasEncryptedImages = DH;    //フラグを戻す
    var dh = 0;
    var dw = 0;
    var dx = rect.x + Number(sai.ss_x); //表示位置X
    var dy = rect.y + Number(sai.ss_y);  //表示位置Y

    this.changePaintOpacity(true);
    this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, dx, dy, dw, dh);
};

    //セーブ画面の背景読み込み
    var _Scene_File_createBackground = Scene_File.prototype.createBackground;
    Scene_File.prototype.createBackground = function(){
        if(bgBitmapFile){
                        Scene_MenuBase.prototype.createBackground.call(this);//追加行
            this._backgroundSprite = new Sprite();
            this._backgroundSprite.bitmap =
             ImageManager.loadPicture(bgBitmapFile);
            this.addChild(this._backgroundSprite);
            return;
        }
        _Scene_File_createBackground.call(this);    // 背景ファイルが無い場合
    };


})();[/pre]
梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
回帖
566
发表于 2019-5-30 07:59:33 | 显示全部楼层
存档卡顿主要跟读写的数据量有关,检查一下你的数据库,把冗余的内容去掉再试试。

点评

emm但是用默认存档完全不卡。是不是多了截图的缘故?用了截图存档后只要存一个档save文件夹里global开头文件有24kb而用默认存档只有1kb  发表于 2019-5-30 08:13
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部