主菜单遇到的问题
大家好啊!本计划进行的主菜单人物菜单和金钱菜单的绘制的没有如期进行原因是主菜单绘制出现了一些问题这次就分享一下这上面遇到的问题。
原始正常效果
显示的辅助菜单
显示原始菜单,辅助查看问题原因
通过这两个图片可以看到已经完成了子菜单功能了,嗯!基本万事大吉了…
不过鬼畜的还在后面呢!!!
鬼畜的二级菜单
到这里大家应该已经明白了。
不过再说一下,主菜单界面上,第一个子菜单能够正常运行,但添加了第二个子菜单后却运行鬼畜了,同时将两个子菜单图片显示出来,按键时第二个子菜单只能显示前两个按钮效果;打开第二个子菜单界面时却不显示对应的子菜单图片。
错误代码部分
由于是复制粘贴的代码的原因,对于代码检查上过于疏忽,导致问题的发生。
错误出现在哪里呢?
if(this._OptionsButtons[this._itemCommandWindow.index()]){
this._OptionsButtons[this._itemCommandWindow.index()].visible=true;
}
这段代码是进行图片更新的,即菜单的更新,查找的不少的时间,都没有找到原因,之后才发现原来是:
this._itemCommandWindow
它的作用是进行物品菜单图片的更新,很明显这不是我们需要的,我们需要的是设置菜单的更新;由于这个部分错误导致了更新出现了鬼畜的情况发生。
修改后的完整代码
var _Scene_Menu_create = Scene_Menu.prototype.create;
Scene_Menu.prototype.create = function() {
_Scene_Menu_create.call(this);
var menuIndexs = [0, 1, 2, 3];
var menuItemIndexs = [0, 1];
var menuOptionsIndexs = [0, 1, 2, 3, 4];
var clickMenus = [
function() {
this.commandPersonal();
SoundManager.playOk();
},
function() {
this.commandPersonal();
SoundManager.playOk();
},
function() {
this.commandMenuItem();
SoundManager.playOk();
},
function() {
this.commandMenuIOptions();
SoundManager.playOk();
}
];
this._cmdMenuButtons = [];
for (var i in menuIndexs) {
var sprite = new Sprite_Button();
sprite.bitmap = ImageManager.loadMenu("MianMenu2");
var sx = menuIndexs[i] % 4 * 128;
var sy = 0;
sprite.y = 130;
sprite.x = 15;
sprite.setFrame(sx, sy, 128, 192);
sprite.setClickHandler(clickMenus[i].bind(this));
this._cmdMenuButtons.push(sprite);
this.addChild(sprite);
}
var clickItemMenus = [
function() {
this.commandItem();
SoundManager.playOk();
},
function() {
this.commandPersonal();
SoundManager.playOk();
}
];
this._ItemMenuButtons = [];
for (var i in menuItemIndexs) {
var sprite = new Sprite_Button();
sprite.bitmap = ImageManager.loadMenu("MianMenuItem");
var sx = menuItemIndexs[i] % 2 * 128;
var sy = 0;
sprite.y = 147;//70
sprite.x = 71;//50
sprite.setFrame(sx, sy, 128, 128);
sprite.setClickHandler(clickItemMenus[i].bind(this));
this._ItemMenuButtons.push(sprite);
this.addChild(sprite);
}
var clickOptionsMenus = [
function() {
this.commandSave();
SoundManager.playOk();
},
function() {
this.commandContinue();
SoundManager.playOk();
},
function() {
this.commandPersonal();
SoundManager.playOk();
},
function() {
this.commandPersonal();
SoundManager.playOk();
},
function() {
this.commandGameEnd();
SoundManager.playOk();
}
];
this._OptionsButtons = [];
for (var i in menuOptionsIndexs) {
var sprite = new Sprite_Button();
sprite.bitmap = ImageManager.loadMenu("MianMenuSys");
var sx = menuOptionsIndexs[i] % 5 * 192;
var sy = 0;
sprite.y = 49;//70
sprite.x = 71;//50
sprite.setFrame(sx, sy, 192, 224);
sprite.setClickHandler(clickOptionsMenus[i].bind(this));
this._OptionsButtons.push(sprite);
this.addChild(sprite);
}
//主菜单窗口
//this.createCommandWindow();
//主菜单物品窗口
this.createItemCommandWindow();
//主菜单系统窗口
this.createOptionsCommandWindow();
};
var _Scene_Menu_update = Scene_Menu.prototype.update;
Scene_Menu.prototype.update = function(){
_Scene_Menu_update.call(this);
var scmdButtons= this._cmdMenuButtons;
for(var i in scmdButtons){
this._cmdMenuButtons[i].visible=false;
}
if(this._cmdMenuButtons[this._commandWindow.index()]){
this._cmdMenuButtons[this._commandWindow.index()].visible=true;
}
var scmdItemButtons= this._ItemMenuButtons;
for(var i in scmdItemButtons){
this._ItemMenuButtons[i].visible=false;
}
if(this._ItemMenuButtons[this._itemCommandWindow.index()]){
this._ItemMenuButtons[this._itemCommandWindow.index()].visible=true;
}
var scmdOptionsButtons= this._OptionsButtons;
for(var i in scmdOptionsButtons){
this._OptionsButtons[i].visible=false;
}
if(this._OptionsButtons[this._optionsCommandWindow.index()]){
this._OptionsButtons[this._optionsCommandWindow.index()].visible=true;
}
}
最终结果
由于操作按钮过多,因此放几张确定下实际效果没有问题就行。
下一步
接下来确定要处理的包括人物菜单UI,状态菜单UI,系统音乐及音效按钮操作,S/L的UI操作及游戏开始菜单的UI美化,不知道还会遇到多少的坑在等待的我呢!!!