【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

2024-02-20 15:28

本文主要是介绍【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RPG Maker MV 仿新仙剑 战斗场景UI 二

  • 战斗指令菜单
    • 原仙剑战斗指令图
    • RMMV战斗指令对应代码
      • 战斗指令菜单
      • 代码
      • 效果

战斗指令菜单

原仙剑战斗指令菜单是使用方向键控制,同时按照使用情况正好对应四个指令和四个方向,同时没有选中的菜单用黑色透明图片覆盖,达到未选中的效果,红色图片表示不能进行选中(即不能使用)。

原仙剑战斗指令图

原仙剑战斗指令图
通过该图可以清楚的看到未选中及选中、不能选中的情况;同时可以看到其他指令菜单的位置也算是做一下绝对的定位。

RMMV战斗指令对应代码

战斗时,分配键盘上Up键对应攻击,Down键对应其他,Left键对应法术,Right键对应合击。

战斗指令菜单

function Window_ActorCommand() {this.initialize.apply(this, arguments);
}Window_ActorCommand.prototype = Object.create(Window_Command.prototype);
Window_ActorCommand.prototype.constructor = Window_ActorCommand;Window_ActorCommand.prototype.initialize = function() {var y = Graphics.boxHeight - this.windowHeight();Window_Command.prototype.initialize.call(this, 0, y);this.openness = 0;this.deactivate();this._actor = null;
};Window_ActorCommand.prototype.windowWidth = function() {return 192;
};Window_ActorCommand.prototype.numVisibleRows = function() {return 4;
};//创建命令列表
Window_ActorCommand.prototype.makeCommandList = function() {if (this._actor) {this.addAttackCommand();this.addSkillCommands();this.addJointAttackCommand();this.addOtherCommand();}
};
//添加攻击命令
Window_ActorCommand.prototype.addAttackCommand = function() {this.addCommand(TextManager.attack, 'attack', this._actor.canAttack());
};
//添加魔法命令
Window_ActorCommand.prototype.addSkillCommands = function() {var skillTypes = this._actor.addedSkillTypes();skillTypes.sort(function(a, b) {return a - b;});skillTypes.forEach(function(stypeId) {var name = $dataSystem.skillTypes[stypeId];this.addCommand(name, 'skill', true, stypeId);}, this);
};
//添加合击命令
Window_ActorCommand.prototype.addJointAttackCommand = function() {this.addCommand("合击", 'jointAttack', this._actor.canAttack());
};
//添加其他命令
Window_ActorCommand.prototype.addOtherCommand = function() {this.addCommand("其他", 'other');
};
Window_ActorCommand.prototype.setup = function(actor) {this._actor = actor;this.clearCommandList();this.makeCommandList();this.refresh();this.selectLast();this.activate();this.open();
};Window_ActorCommand.prototype.processOk = function() {if (this._actor) {if (ConfigManager.commandRemember) {this._actor.setLastCommandSymbol(this.currentSymbol());} else {this._actor.setLastCommandSymbol('');}}Window_Command.prototype.processOk.call(this);
};Window_ActorCommand.prototype.selectLast = function() {this.select(0);if (this._actor && ConfigManager.commandRemember) {var symbol = this._actor.lastCommandSymbol();this.selectSymbol(symbol);if (symbol === 'skill') {var skill = this._actor.lastBattleSkill();if (skill) {this.selectExt(skill.stypeId);}}}
};//--------------------------------------------------------------//光标向下
Window_ActorCommand.prototype.cursorDown = function(wrap) {if(wrap){this.select(3);}
};
//光标向上
Window_ActorCommand.prototype.cursorUp = function(wrap) {if(wrap){this.select(0);}
};
//光标向右
Window_ActorCommand.prototype.cursorRight = function(wrap) {if(wrap){this.select(2);}
};
//光标向左
Window_ActorCommand.prototype.cursorLeft = function(wrap) {if(wrap){this.select(1);}
};

这里进行了简化,四个按键操作原来需要获取指令序号及指令的数量后计算下一个操作的指令,现在全部简化为,判断是否按下对应按键,就执行对应的指令。

代码

Window_ActorCommand.prototype.initialize = function() {......this.move(12, 344, 148, 130);this.BattleCommand= ImageManager.loadSystem('FightCommand');......this.refresh();
};
//标准内边距
Window_ActorCommand.prototype.standardPadding = function() {return 0;
};
Window_ActorCommand.prototype._refreshCursor = function() {
};
Window_ActorCommand.prototype._updateCursor = function() {
};
Window_ActorCommand.prototype.update=function(){Window_Command.prototype.update.call(this);this.refresh();
}
Window_ActorCommand.prototype.refresh = function() {this.contents.clear();if(this._actor){this.drawBattleActorCommand();}
};
Window_ActorCommand.prototype.drawBattleActorCommand = function() {var bitmap=this.BattleCommand;this.contents.paintOpacity=255;this.contents.blt(bitmap, 0, this._list[0].enabled?0:56, 56, 56, 46, 0);this.contents.blt(bitmap, 112, this._list[3].enabled?0:56, 56, 56, 46, 73);this.contents.blt(bitmap, 168, this._list[1].enabled?0:56, 56, 56, 0, 37);this.contents.blt(bitmap, 56, this._list[2].enabled?0:56, 56, 56, 91, 37);this.contents.paintOpacity=120;switch(this._index){case 0:if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);break;case 1:if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);break;case 2:if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);break;case 3:if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);break;case -1:break;}
};
//光标向下
Window_ActorCommand.prototype.cursorDown = function(wrap) {if(wrap&&this._list[3].enabled){this.select(3);}
};

_refreshCursor 和 _updateCursor 方法由于是处理光标的因此用空的方法去掉对应的光标; drawBattleActorCommand 方法是进行绘制战斗指令图标的,其流程是绘制基础战斗指令的图标,通过三元运算符判断绘制的图片是启用还是未启用的,后面是绘制图标的遮挡的。选中的图标和未启用的图标不会被进行遮挡; cursorDown 方法和另外三个方法进行了一定的修改,即未启用的指令是不会被选中的; refresh update方法分别是进行更新和刷新指令图标的,这样后期若是需要人物不能操作时就可以实现效果。

效果

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
基础战斗菜单就已完成,之后将制作其他指令的中的二级和三级菜单。

这篇关于【RPG Maker MV 仿新仙剑 战斗场景UI (二)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728667

相关文章

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert