ProcessEscapeCharacter as processNormalCharacter
Hello all,I got a funny challenge which I always get, "NaN" of undefined from textState.
The problem comes from processEscapeCharacter inside message, which I took into a cool effect
for my base plugin, it works, the problem only, the escape character output that line
in 1 sweep instead of letter by letter by default.
here is the code I use for it. (untested in MZ, but functional in MV)
as for the record, you may place it in your own plugin if credits is given!
for my process character code, message partfor the updates, unsure how to add
processNormalCharacter to use in combination with processEscapeCharacter
JavaScript:
SDJB_Base._WB_processEscapeCharacter = Window_Base.prototype.processEscapeCharacter; Window_Base.prototype.processEscapeCharacter = function(code, textState) { switch (code) { // \WAIT case "WAIT": let delay = this.obtainEscapeParam(textState); this.startWait(delay); break; // \UV case "UV": this.updateDynamicVariables(textState); break; case "SM": case "STOP": if (this instanceof Window_Message) { this._stopMessage = true; Input.keyRepeatWait = Infinity; Input.keyRepeatInterval = Infinity; } break; case "???": // New Function break; default: SDJB_Base._WB_processEscapeCharacter.call(this, code, textState); break; } }; Window_Base.prototype.updateDynamicVariables = function(textState) { const paramMatch = /^\[(.+?)\]/.exec(textState.text.slice(textState.index)); if (!paramMatch) return; const params = paramMatch.split(",").map(s => s.trim().replace(/["']/g, "")); const varId = parseInt(params); const mode = params || null; const custom = params || null; if (!this._dynamicVars) this._dynamicVars = []; this._dynamicVars.push({ id: varId, x: textState.x, y: textState.y, width: 0, systemTime: mode, customFormat: custom, lastValue: null, active: true }); //this._dynamicVars.active = true; textState.index += paramMatch.length; }; Window_Base.prototype.updateLiveVariables = function() { for (let spot of this._dynamicVars) { if (!spot.active) continue; let value = spot.systemTime ? getTime(spot.systemTime, spot.customFormat) : $gameVariables.value(spot.id); if (String(value) !== spot.lastValue) { let w = this.textWidth(value) + 4; this.contents.clearRect(spot.x, spot.y, w, this.lineHeight()); this.drawText(value, spot.x, spot.y, w); spot.width = this.textWidth(value); spot.lastValue = String(value); } } };//update inside messages for the variables or time. SDJB_Base._WindowMessage_update = Window_Message.prototype.update; Window_Message.prototype.update = function() { if (this._stopMessage) { if (Input.isTriggered("ok") || Input.isTriggered("cancel") || TouchInput.isTriggered()) { //=> restore RepeatWait and RepeatInterval Input.keyRepeatWait = OriginalKRW; Input.keyRepeatInterval = OriginalKRI; this._stopMessage = false; } else if (this._dynamicVars && this.isOpen()) { this.updateLiveVariables(); } } SDJB_Base._WindowMessage_update.call(this); if (!this._stopMessage && this._dynamicVars && this.isOpen()) { this.updateLiveVariables(); } }; SDJB_Base._WindowMessage_terminateMessage = Window_Message.prototype.terminateMessage; Window_Message.prototype.terminateMessage = function() { this._dynamicVars = null; this._stopMessage = false; Input.keyRepeatWait = OriginalKRW; Input.keyRepeatInterval = OriginalKRI; SDJB_Base._WindowMessage_terminateMessage.call(this); };
while the update works, how can I add so it prints letter by letter effect (default) or if it
changes to edit the effect, using that?
I try to loop over the processEscapeCharacter and textState.index, but that gave the error "NaN"
which conflict during update, but I don't know if there is a work around nicely?
so my question is:How can I use letter by letter or any effect to print out the UV processEscapeCharacter,
instead that it prints out in 1 go? (if its even possible).
本贴来自国际rpgmaker官方论坛作者:ShadowDragon处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/processescapecharacter-as-processnormalcharacter.180402/
页:
[1]