4.gif (1.24 MB, 下载次数: 48)
whitedewxiao 发表于 2021-2-28 19:51
好像有行指令可以渐变,但是我忘了orz
范例里面应该有写的。
或者那个rgd的灯光脚本也包含有类似的代码。 ...
仇九 发表于 2021-3-1 00:41
本来写了一大段然后提供了几个办法(依据实际情况),结果因为查别的东西查完后随手关了浏览器而导致没有记 ...
//============================================================================= // ULDS.js //============================================================================= /*: * @plugindesc Unlimited Layer Display System. * @author taroxd * * @param Default Path * @desc The default path where pictures are stored. * @default parallaxes * * @param Default Z * @desc The default Z coordinate for sprites. * @type number * @decimals 2 * @min -15 * @max 15 * @default 0.5 * * @help This plugin does not provide plugin commands. * * Map Note: <ulds> JSON </ulds> * "name": picture filename * "path": picture path (default to Default Path) * "loop": true/false * Whether the picture should loop. * "hue"/"smooth": the attribute of a Bitmap. * <attribute>: the attribute of a Sprite. * * A string can be used as a value to be interpreted as a formula. * In the formula, 't' refers to frame count. * 's' refers to $gameSwitches. * 'v' refers to $gameVaribles. * * Also, various helpers are available, defined in Helper. * * If a string is used as a formula of the attribute, * the attribute will be updated every frame. * * By the way, attributes such as "anchor.x" is also available. * * * Here is an example: * <ulds> { "name": "BlueSky", "x": "this.rx(t)", "y": 50, "loop": true, "opacity": this.rx(v) } </ulds> * */ void function() { var assign = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { target[key] = source[key]; } } return target; }; var RE = /<ulds>([^]*?)<\/ulds>/ig; var parameters = PluginManager.parameters('ULDS'); var DEFAULT_SETTINGS = { z: parseFloat(parameters['Default Z']), path: parameters['Default Path'], smooth: true }; // Feel free to add your own helper. var Helper = { t: 0, go: function(s,min,max,time) { if (this.godata==null) this.godata=[min,max,time,(max-min)/time,0]; if (this.rem==null) {this.rem=false;return min;} if ($gameSwitches.value(s)!=this.rem) { this.rem=$gameSwitches.value(s); this.godata[4]=time; } if (this.godata[4]>0) { this.godata[4]--; return this.rem? this.opacity+this.godata[3]:this.opacity-this.godata[3]; } return this.opacity; }, // Converts a coordinate on the map to the corresponding coordinate on the screen. rx: function(x, scrollRate) { if (scrollRate == null) { scrollRate = $gameMap.tileWidth(); } if (scrollRate === 0) { return x; } else { return $gameMap.adjustX(x / scrollRate) * scrollRate; } }, ry: function(y, scrollRate) { if (scrollRate == null) { scrollRate = $gameMap.tileHeight(); } if (scrollRate === 0) { return y; } else { return $gameMap.adjustY(y / scrollRate) * scrollRate; } }, update: function() { ++this.t; this._updater(this.t, $gameSwitches, $gameVariables); }, assignSettings: function(settings) { var code = ''; for (var key in settings) { var value = settings[key]; if (typeof(value) === 'string') { // this.x = (formula); // this.scale.x = (formula); // key is "scale.x" code += 'this.' + key + ' = (' + value + ');\n'; } else { // if key is "scale.x" // keys is ["scale", "x"] var keys = key.split('.'); // set key to "x" key = keys.pop(); var target = this; keys.forEach(function(k) { if (typeof(target) !== 'object') { target[k] = {}; } target = target[k]; }); target[key] = value; } } // You may log the code for debugging purpose. // console.log(code); this._updater = new Function('t', 's', 'v', code) ; } }; // NOT a class constructor function ULDS(settings) { settings = assign({}, DEFAULT_SETTINGS, settings); var spriteClass = settings.loop ? ULDS.TilingSprite : ULDS.Sprite; var bitmap = ImageManager.loadBitmap('img/' + settings.path + '/', settings.name, settings.hue, settings.smooth); var sprite = new spriteClass(bitmap); delete settings.path; delete settings.name; delete settings.loop; delete settings.hue; delete settings.smooth; sprite.assignSettings(settings); return sprite; } ULDS.Sprite = function(bitmap) { Sprite.call(this, bitmap); }; ULDS.Sprite.prototype = Object.create(Sprite.prototype); ULDS.Sprite.prototype.constructor = ULDS.Sprite; assign(ULDS.Sprite.prototype, Helper); ULDS.TilingSprite = function(bitmap) { TilingSprite.call(this, bitmap); bitmap.addLoadListener(function() { this.move(0, 0, bitmap.width, bitmap.height); }.bind(this)); }; ULDS.TilingSprite.prototype = Object.create(TilingSprite.prototype); ULDS.TilingSprite.prototype.constructor = ULDS.TilingSprite; assign(ULDS.TilingSprite.prototype, Helper); Object.defineProperties(ULDS.TilingSprite.prototype, { x: { get: function() { return -this.origin.x; }, set: function(x) { this.origin.x = -x; } }, y: { get: function() { return -this.origin.y; }, set: function(y) { this.origin.y = -y; } } }); var ct = Spriteset_Map.prototype.createTilemap; Spriteset_Map.prototype.createTilemap = function() { ct.call(this); $dataMap.note.replace(RE, function(_match, settings) { var isValid = false; try { settings = JSON.parse(settings); isValid = typeof(settings) === 'object'; if (!isValid) { throw 'ULDS settings should be an object'; } } catch (e) { console.error(e); console.log(settings); } if (isValid) { this._tilemap.addChild(ULDS(settings)); } }.bind(this)); }; }();
仇九 发表于 2021-3-1 23:10
//=============================================================================
// ULDS.js
//======= ...
仇九 发表于 2021-3-1 23:10
//=============================================================================
// ULDS.js
//======= ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |