- Сообщений: 1239
- Спасибо получено: 1045
ввод текста с клавиатуры под MV
з.ы. волшебное искусство "Гугл-фу" не помогло, так что "гугл в помощь" - не вариант.
Всего хорошего, и спасибо за рыбу
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
И спустя сутки и около 250 строк кода -
держи
. Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Попробовал этот скрипт, но мне нужен именно вод текста с клавиатуры, то есть игрок должен именно печатать текст, а не выбирать буквы в окне, да и 8 символов маловато будет, поскольку предполагается ввод целых предложений.EvilCat пишет: "Это же можно переделать из окна ввода имени персонажа за двадцать минут!" подумала я
И спустя сутки и около 250 строк кода - держи .
Всего хорошего, и спасибо за рыбу
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ввод предложений с клавиатуры сделать не возьмусь, потому что там работы точно будет больше %)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Но там еще нужно добавить красивостей, возможно, улучшить проверку ответа и что-нибудь еще улучшить.
Вызов командой: Имя плагина open "Правильный ответ"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Можно заменить на:
Или даже:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Через команду плагина не вызывается вообще (то есть ничего не происходит), при вызове через скрипт выдает ошибкуLekste пишет: Примерно так:
ВНИМАНИЕ: Спойлер!Code:(function() { var correctAnswer = null; this._lastChars = ""; this._lastPressedKeyCode = null; // Plugin commands Game_Interpreter.prototype.command356 = function() { var params = this._params[0]; params = params.replace(/((\"[a-zA-Zа-яА-Я\s]+\")|([^\s][a-zA-Zа-яА-Я]+[\s$]))/g, '$1,'); params = params.replace(/[\s\n\"]*\,[\s\n\"]*/g, ','); var args = params.split(','); var command = args.shift(); this.pluginCommand(command, args); return true; }; var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command === 'CodeInput') { switch (args[0]) { case 'open': if (args[1] != undefined && args[1] != null) { correctAnswer = args[1]; SceneManager.push(Scene_Answer); } break; case 'close': SceneManager.close(); break; } } }; // Input Input.keyMapper[8] = 'backspace'; var _Input_onKeyDown = Input._onKeyDown; Input._onKeyDown = function(event) { if (!this._shouldIgnoreSymbolKey(event.keyCode)) { _Input_onKeyDown.call(this, event); this._lastPressedKeyCode = event.keyCode; } }; Input._isDirectInputScene = function() { var sceneName = SceneManager._scene.constructor.name; return (sceneName === "Scene_Answer"); } Input._shouldIgnoreSymbolKey = function(keyCode) { var isDirectInput = this._isDirectInputScene(); var isKeyInShortList = (keyCode == 13 || keyCode == 32 || keyCode == 8); return isDirectInput && !isKeyInShortList; }; var _Input_setupEventHandlers = Input._setupEventHandlers; Input._setupEventHandlers = function () { _Input_setupEventHandlers.call(this); document.addEventListener('keypress', this._onKeyPress.bind(this)); }; var _Input_shouldPreventDefault = Input._shouldPreventDefault; Input._shouldPreventDefault = function(keyCode) { if (!this.isDirectInput) { return _Input_shouldPreventDefault(keyCode); } return false; } Input._onKeyPress = function(event) { if (event.keyCode == 13) { return; } this._lastChars += String.fromCharCode(event.charCode); console.log(this._lastChars); }; Input.lastCharsInput = function() { var lastCharsInput = this._lastChars; this._lastChars = ""; return lastCharsInput; } // Scene setup function Scene_Answer() { this.initialize.apply(this, arguments); } Scene_Answer.prototype = Object.create(Scene_Base.prototype); Scene_Answer.prototype.constructor = Scene_Answer; Scene_Answer.prototype.initialize = function() { Scene_Base.prototype.initialize.call(this); }; Scene_Answer.prototype.create = function() { Scene_Base.prototype.create.call(this); this.createWindowLayer(); this._winAnswerInput = new Window_Answer_Input(); this.addWindow(this._winAnswerInput); } // Window setup function Window_Answer_Input() { this.initialize.apply(this, arguments); this.answer = ""; } Window_Answer_Input.prototype = Object.create(Window_Base.prototype); Window_Answer_Input.prototype.constructor = Window_Answer_Input; Window_Answer_Input.prototype.initialize = function() { Window_Base.prototype.initialize.call(this, 222, 442, 320, 72); }; Window_Answer_Input.prototype.update = function() { this.updateInput(); this.updateAnswerText(); } Window_Answer_Input.prototype.updateInput = function() { this.answer += Input.lastCharsInput(); if (Input.isRepeated("backspace")) { this.answer = this.answer.substring(0, this.answer.length - 1); } else if (Input.isTriggered("ok") && Input._lastPressedKeyCode == 13) { this.validateAnswer(this.answer); } else if (Input.isTriggered("escape")) { SceneManager.close(); } } Window_Answer_Input.prototype.updateAnswerText = function() { this.contents.clear(); this.drawText(this.answer, 0, 0, this.contents.width, 32, "center"); this.show(); } Window_Answer_Input.prototype.validateAnswer = function(answer) { if (answer.toLowerCase() === correctAnswer.toLowerCase()) { alert("Ответ верный!"); } else { alert("Ответ неверный!"); alert("Верный ответ: " + correctAnswer); } } })();
Но там еще нужно добавить красивостей, возможно, улучшить проверку ответа и что-нибудь еще улучшить.
Вызов командой: Имя плагина open "Правильный ответ"
Всего хорошего, и спасибо за рыбу
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Заменил отдельную сцену на сцену карты.
Возникла проблема - после нажатия кнопки "Ок", нажатие на карте тоже срабатывает и ивент запускается заного.
Если кто знает как избежать этого, буду рад, если поправите - я уже устал воевать с этим странным двигом.
Результат ответа игрока можно узнать из SceneManager._scene._answerInputWindow.isPlayerAnswered:
true - ответил верно
false - закрыл окно так и не дав правильного ответа
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
P.S. Похоже, ты уже подсмотрел...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ничего не помогло. Либо открывается ивент, либо бесконечный цикл.
Аааа. Я похоже ошибку нашёл - в updateWaitingMode неправильно состояние waiting устанавливается. Нужно отрицание убрать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Скрипт:
Пример:
Демка:
yadi.sk/d/vWWBY6rDm2fcA
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
const MIN_INPUT_FIELD_WIDTH = parameters;
const TEXT_COLOR = parameters;
const PLACEHOLDER_COLOR = parameters;
const PLACEHOLDER_TEXT = parameters;
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
