Project1

标题: 中文名输入插件 [打印本页]

作者: 魏玉龙    时间: 2018-9-15 14:36
标题: 中文名输入插件
本帖最后由 魏玉龙 于 2018-9-15 16:58 编辑

写插件貌似会上瘾,刚又整出来了一个中文名输入!
游戏默认的输入方式太Low了,果断自己写一个替换掉!
现在可以用输入法了,手机端没实验,有条件的帮忙试一下!
移动端无法确定的BUG已修复!

[pre lang="javascript" file="ChineseNameEditor.js"]/*:
* ChineseNameEditor.js
* @plugindesc 中文名输入插件
* @author 魏玉龙
* @since 2018.09.15
* @version 1.0
*
* @param windowWidth
* @desc 设置窗口的宽度
* @default 580
*
* @param windowCenter
* @desc 设置为屏幕居中 true/false
* @default true
*
* @param windowOpacity
* @desc 设置窗口透明度 (0 ~ 255)
* @default 225
*
* @param askingText
* @desc 设置询问框文本
* @default 请输入一个角色名!
*
* @param fontColor
* @desc 设置字体颜色
* @default white
*
* @param fontSize
* @desc 设置字体大小
* @default 28
*
* @param showDefaultName
* @desc 显示默认角色名 true/false
* @default true
*
* @help
*
* 这个插件提供了一个输入框,可以让你在修改名称时输入中文文字
*
*/
(function () {
  var parameters = PluginManager.parameters('ChineseNameEditor');
  var windowWidth = Number(parameters['windowWidth'] || 580);
  var windowCenter = JSON.parse(parameters['windowCenter'] || true);
  var windowOpacity = Number(parameters['windowOpacity'] || 225);
  var askText = String(parameters['askingText'] || '请输入一个角色名!');
  var fontSize = Number(parameters['fontSize'] || 28);
  var fontColor = String(parameters['fontColor'] || 'white');
  var showDefaultName = JSON.parse(parameters['showDefaultName'] || true);

  function TextBox() {
    this.initialize.apply(this, arguments);
  };
  TextBox.prototype.initialize = function (_editWindow) {
    this._editWindow = _editWindow;
    this.createTextBox();
    this.getFocus();
  };
  TextBox.prototype.createTextBox = function () {
    this._textBox = document.createElement('input');
    this._textBox.type = 'text';
    this._textBox.value = showDefaultName ? this._editWindow._name : '';
    this._textBox.autofocus = false;
    this._textBox.width = 1;
    this._textBox.height = 1;
    this._textBox.style.opacity = 0;
    this._textBox.style.zIndex = 1000;
    this._textBox.style.imeMode = 'active';
    this._textBox.style.position = 'absolute';
    this._textBox.style.top = 0;
    this._textBox.style.left = 0;
    this._textBox.style.right = 0;
    this._textBox.style.bottom = 0;
    this._textBox.onkeydown = this.onKeyDown.bind(this);
    document.body.appendChild(this._textBox);
  };
  TextBox.prototype.setEvent = function (func) {
    this._textBox.onchange = func;
  };
  TextBox.prototype.terminateTextBox = function () {
    document.body.removeChild(this._textBox);
  };
  TextBox.prototype.onKeyDown = function (e) {
    var keyCode = e.which;
    this.getFocus();
    if (keyCode < 32) {
      if (keyCode === 8) {
        this.backSpace();
      } else if (keyCode === 13) {
        if (this.getTextLength() <= 0) {
          e.preventDefault();
        }
      }
    }
  };
  TextBox.prototype.getTextLength = function () {
    return this._textBox.value.length;
  };
  TextBox.prototype.getMaxLength = function () {
    return this._editWindow._maxLength;
  };
  TextBox.prototype.backSpace = function () {
    this._editWindow._name = this._editWindow._name.slice(0, this._textBox.value.length - 1);
    this._editWindow._index = this._textBox.value.length;
    this._textBox.value = this._editWindow._name;
    this._editWindow.refresh();
  };
  TextBox.prototype.refreshNameEdit = function () {
    this._editWindow._name = this._textBox.value.toString();
    this._editWindow._index = this._textBox.value.length || 0;
    this._editWindow.refresh();
  };
  TextBox.prototype.update = function () {
    if (this.getTextLength() <= this._editWindow._maxLength) {
      this.refreshNameEdit();
    }
  };
  TextBox.prototype.getFocus = function () {
    this._textBox.focus();
  };
  TextBox.prototype.terminate = function () {
    this.terminateTextBox();
  };

  Window_NameEdit.prototype.charWidth = function () {
    var text = '\uAC00';
    return this.textWidth(text)
  };
  Window_NameEdit.prototype.drawActorFace = function (actor, x, y, width, height) {
    this.drawFace(actor.faceName(), actor.faceIndex(), x, y, width, height);
    this.changeTextColor(this.hpColor(actor));
    this.drawText(askText, this.left(), y + this.fittingHeight(1) / 2, this.width);
  };
  Window_NameEdit.prototype.itemRect = function (index) {
    return {
      x: this.left() + index * this.charWidth(),
      y: this.fittingHeight(1),
      width: this.charWidth(),
      height: this.lineHeight()
    };
  };
  Window_NameEdit.prototype.windowWidth = function () {
    return windowWidth;
  };
  Window_NameEdit.prototype.drawChar = function (index) {
    var rect = this.itemRect(index);
    this.resetTextColor();
    this.contents.outlineWidth = 1;
    this.contents.outlineColor = 'black';
    this.contents.fontColor = fontColor;
    this.drawText(this._name[index] || '', rect.x, rect.y)
  };
  Window_NameEdit.prototype.standardFontSize = function () {
    return fontSize;
  };

  Scene_Name.prototype.create = function () {
    Scene_MenuBase.prototype.create.call(this);
    this._actor = $gameActors.actor(this._actorId);
    this.createEditWindow();
    this.createTextBox();
    this._textBox.setEvent(this.onInputOk.bind(this));
  };
  Scene_Name.prototype.createTextBox = function () {
    this._textBox = new TextBox(this._editWindow);
    if (windowCenter) {
      this._editWindow.y = Graphics.boxHeight / 2 - this._editWindow.height / 2;
    }
    this._editWindow.opacity = windowOpacity;
  };
  Scene_Name.prototype.update = function () {
    this._textBox.getFocus();
    this._textBox.update();
    Scene_MenuBase.prototype.update.call(this);
    if(Input.isRepeated('ok')){
      this.onInputOk();
    }
  };
  Scene_Name.prototype.terminate = function () {
    Scene_MenuBase.prototype.terminate.call(this);
    this._textBox.terminate();
  };
})();[/pre]
作者: 魏玉龙    时间: 2018-9-15 14:43
突然想到,我这样一搞,估计手柄输入应该是没戏了!
所以用的人如果考虑游戏支持手柄,不建议使用该插件!
作者: q1456503215    时间: 2018-9-15 15:02
我用手机试试
作者: q1456503215    时间: 2018-9-15 15:14
本帖最后由 q1456503215 于 2018-9-15 15:17 编辑

名字输入没有问题 但是在安卓端 确定好像无效 无法进行游戏

mv自带的输入名字就没有问题
作者: 魏玉龙    时间: 2018-9-15 15:25
手机回车键 不是13?
作者: q1456503215    时间: 2018-9-15 15:28
魏玉龙 发表于 2018-9-15 15:25
手机回车键 不是13?

不知道 反正不管用  mv的回车键好像是 ok
作者: 魏玉龙    时间: 2018-9-15 15:31
q1456503215 发表于 2018-9-15 15:28
不知道 反正不管用  mv的回车键好像是 ok

你最后点的是输入法上的 前往 还是点 虚拟按键的 O
作者: q1456503215    时间: 2018-9-15 15:35
魏玉龙 发表于 2018-9-15 15:31
你最后点的是输入法上的 前往 还是点 虚拟按键的 O

前往和 O 都没效果  我那个O 就是mv的确定键
作者: 魏玉龙    时间: 2018-9-15 15:41
q1456503215 发表于 2018-9-15 15:35
前往和 O 都没效果  我那个O 就是mv的确定键

你用的这个虚拟按键发给我
我用手机浏览器测试是没问题
作者: 魏玉龙    时间: 2018-9-15 16:51
在 174行下面插入如下代码试试

  1.     if(Input.isRepeated('ok')){
  2.       this.onInputOk();
  3.     }
复制代码

作者: yushao1999    时间: 2018-10-4 22:58
简单实用,赞!!!!!!!!!!!
作者: peifectsun    时间: 2018-10-5 23:59
大神,求教一下,插件装上后,askingText选项,说明和开始输入姓名的上面都是“口口h口口t口”的乱码怎么解决?
作者: 魏玉龙    时间: 2018-10-8 09:18
peifectsun 发表于 2018-10-5 23:59
大神,求教一下,插件装上后,askingText选项,说明和开始输入姓名的上面都是“口口h口口t口”的乱码怎么解 ...

注意一下你复制保存插件的格式是不是utf-8
如果是GBK肯定会乱码的
作者: peifectsun    时间: 2018-10-8 11:54
魏玉龙 发表于 2018-10-8 09:18
注意一下你复制保存插件的格式是不是utf-8
如果是GBK肯定会乱码的

格式转换我试过了,保存文件也是.js的,还是显示乱码。。。
作者: 魔域凌天    时间: 2019-6-4 11:01
为啥字体挨在一块了…………
作者: 13232852057    时间: 2019-6-29 11:05
苦恼了好久一直都是英文终于解决问题了
作者: 18355118009    时间: 2019-7-12 17:38
大佬nb!!!!!!
作者: 轩辕墨卿    时间: 2019-7-16 00:40
谢谢大神
作者: Zeldashu    时间: 2019-7-28 13:17
询问文本的内容无法替换,显示默认名称也是无法切换,请问是什么情况
作者: rex920888rex    时间: 2019-7-29 15:37
很棒啊 收下
作者: 1901631    时间: 2019-8-7 19:23
大佬,插件放在目录下并且加载了,但是开始游戏没有反应啊,需要怎么开启?新萌求助。
作者: sakurashs    时间: 2020-2-29 13:02
谢谢大佬

作者: cqzkid    时间: 2020-3-25 22:17
您好,请问如果要不显示角色的头像的话,应该怎么修改代码呢?
作者: cqzkid    时间: 2020-3-26 00:15
另外好像如果输入空格的话会闪退
作者: BAKAmaid    时间: 2020-4-8 20:59
东西很实用,非常感谢
作者: hzvs009    时间: 2020-8-22 12:11
怎么使用啊,请指教。
作者: hzvs009    时间: 2020-8-22 12:26
Zeldashu 发表于 2019-7-28 13:17
询问文本的内容无法替换,显示默认名称也是无法切换,请问是什么情况 ...

这个插件怎么用能请教一下吗?萌新,不会用....
作者: 红十字    时间: 2020-9-4 10:35
谢谢大神分享.
作者: zaijianfengchuy    时间: 2020-9-13 10:07
之前请教过一个大佬,其实一个短脚本就可以做到名字输入
var sRst=prompt("请输入名字:", "");
if(!!sRst) $gameActors.actor(1).setName(sRst);
作者: j296196585    时间: 2020-11-2 08:56
本帖最后由 j296196585 于 2020-11-2 08:58 编辑

大佬膜拜  MZ一样可以用
作者: 大铁锤-00012    时间: 2023-10-10 20:55
谢谢大佬!
作者: wansand    时间: 2023-11-18 22:29
努力赚星屑
作者: mina.x    时间: 2024-3-11 14:21
感谢大佬




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X5.0