- Joined
- Dec 2, 2017
- Messages
- 2
- Reaction score
- 0
- First Language
- Chinese
- Primarily Uses
- RMMV
Hello everyone, I'm a beginner of RMMV v1.5.1.
Recently I want to custom a Command Menu, so I inherit the Window_Command class.[^1]
The menu named Window_SlotCommand , it has a dynamic height, which is controlled by a variable named _IModuleSlot . If _IModuleSlot isn't null, the command list's length should be 2, or it should be 1.
So here is the code, or you can see in here, ← DropBox:
But strange thing then happened. When I run this code in the new game project, it appeared like this:
photo_left_1 photo_right_1
The left condition is displaying incompletely!
But if I change Window_SlotCommand.prototype.windowHeight return constant value, like 108 or 72, which is the fittingHeight() function had calculated actually and also is logged by console.log() function, displaying is different!
photo_left_2 photo_right_2
This time both condition is displaying completely!
I tried other dynamic height such as 2&3, 3&2(which can exclude the order factor at the window first created), it showed the same phenomenon that the long condition will displaying incompletely if I use calculated value.
SO WHY? It makes no sense that constant value and calculated value results to different display phenomenon! I thought JavaScript maybe do some wrong stuff, but now I think maybe the RGSS Engine doesn't work well with JavaScript, if RGSS Engine is not writen by JavaScript in its foundation.
Any suggestions will be grateful, thanks.
- - -
[^1]: Although Js didn't have a Class concept, I prefer to use Class to describe my question
Recently I want to custom a Command Menu, so I inherit the Window_Command class.[^1]
The menu named Window_SlotCommand , it has a dynamic height, which is controlled by a variable named _IModuleSlot . If _IModuleSlot isn't null, the command list's length should be 2, or it should be 1.
So here is the code, or you can see in here, ← DropBox:
As you can see, setIModuleSlot() function is used to control the _IModuleSlot, and every time we show _slotCommandWindow, it will display two kinds of command list alternately.//=============================================================================
// Command Issue
// SoraShiro_CommandIssue.js
//=============================================================================
var Sora = Sora || {};
Sora.CommandIssue = Sora.CommandIssue || {};
Sora.CommandIssue.version = 1.00;
//=============================================================================
// Scene_Menu
//=============================================================================
Sora.CommandIssue.Scene_Menu_create = Scene_Menu.prototype.create;
Scene_Menu.prototype.create = function () {
Sora.CommandIssue.Scene_Menu_create.call(this);};
this.createSlotCommandWindow();
Sora.CommandIssue.Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function () {
this._commandWindow = new Window_MenuCommand(0, 0);};
this._commandWindow.setHandler('strange', this.onSlotSelect.bind(this));
this._commandWindow.setHandler('item', this.commandItem.bind(this));
this._commandWindow.setHandler('skill', this.commandPersonal.bind(this));
this._commandWindow.setHandler('equip', this.commandPersonal.bind(this));
this._commandWindow.setHandler('status', this.commandPersonal.bind(this));
this._commandWindow.setHandler('formation', this.commandFormation.bind(this));
this._commandWindow.setHandler('options', this.commandOptions.bind(this));
this._commandWindow.setHandler('save', this.commandSave.bind(this));
this._commandWindow.setHandler('gameEnd', this.commandGameEnd.bind(this));
this._commandWindow.setHandler('cancel', this.popScene.bind(this));
this.addWindow(this._commandWindow);
var $increase = 1;
Scene_Menu.prototype.onSlotSelect = function () {
$increase++;}
if($increase % 2 === 0) {
var s = {};} else {
this._slotCommandWindow.setIModuleSlot(s);
this._slotCommandWindow.setIModuleSlot(null);}
// Move Window
this._slotCommandWindow.move(0, 0,
this._slotCommandWindow.windowWidth(),
this._slotCommandWindow.windowHeight());
this._slotCommandWindow.select(0);
this._slotCommandWindow.activate();
this._slotCommandWindow.show();
Scene_Menu.prototype.createSlotCommandWindow = function () {
this._slotCommandWindow = new Window_SlotCommand();}
this._slotCommandWindow.setHandler('cancel', this.onSlotCommandCancel.bind(this));
this._slotCommandWindow.hide();
this.addWindow(this._slotCommandWindow);
Scene_Menu.prototype.onSlotCommandCancel = function () {
this._slotCommandWindow.deactivate();}
this._slotCommandWindow.hide();
this._commandWindow.activate();
//=============================================================================
// Window_MenuCommand
//=============================================================================
Sora.CommandIssue.Window_MenuCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {}
Sora.CommandIssue.Window_MenuCommand_addOriginalCommands.call(this);
this.addCommand('Strange Thing', 'strange', true);
//=============================================================================
// Slot Command Window
//=============================================================================
function Window_SlotCommand() {
this.initialize.apply(this, arguments);}
Window_SlotCommand.prototype = Object.create(Window_Command.prototype);
Window_SlotCommand.prototype.constructor = Window_SlotCommand;
Window_SlotCommand.prototype.initialize = function() {
Window_Command.prototype.initialize.call(this, 0, 0);};
this._IModuleSlot = null;
Window_SlotCommand.prototype.windowHeight = function () {
var result = this.fittingHeight(this.numVisibleRows());}
console.log(result);
return result;
// return 72;
// return 108;
Window_SlotCommand.prototype.maxCols = function() {
return 1;};
Window_SlotCommand.prototype.setIModuleSlot = function(slot) {
this._IModuleSlot = slot;}
this.refresh();
Window_SlotCommand.prototype.makeCommandList = function() {
if(this._IModuleSlot) {}
this.addCommand('Change', 'change', true);} else {
this.addCommand('Remove', 'remove', true);
this.addCommand('Add', 'add', true);}
Window_SlotCommand.prototype.refresh = function() {
this.clearCommandList();}
this.makeCommandList();
this.contents.clear();
this.drawAllItems();
Window_SlotCommand.prototype.update = function () {
Window_Command.prototype.update.call(this);}
But strange thing then happened. When I run this code in the new game project, it appeared like this:
photo_left_1 photo_right_1
The left condition is displaying incompletely!
But if I change Window_SlotCommand.prototype.windowHeight return constant value, like 108 or 72, which is the fittingHeight() function had calculated actually and also is logged by console.log() function, displaying is different!
photo_left_2 photo_right_2This time both condition is displaying completely!
I tried other dynamic height such as 2&3, 3&2(which can exclude the order factor at the window first created), it showed the same phenomenon that the long condition will displaying incompletely if I use calculated value.
SO WHY? It makes no sense that constant value and calculated value results to different display phenomenon! I thought JavaScript maybe do some wrong stuff, but now I think maybe the RGSS Engine doesn't work well with JavaScript, if RGSS Engine is not writen by JavaScript in its foundation.
Any suggestions will be grateful, thanks.
- - -
[^1]: Although Js didn't have a Class concept, I prefer to use Class to describe my question


