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

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

  • 二级战斗指令菜单
    • RMMV效果
      • 代码
      • 效果
    • 仿仙剑UI
      • 代码
      • 效果

二级战斗指令菜单

仙剑1中二级战斗的菜单内容如下:物品、防御、围攻、逃跑、状态这五项。
现在来完成金玉其外的UI部分,内核具体的功能需要后期进行填充了!

RMMV效果

在RMMV中原始菜单中是没有这二级菜单的,因此需要重新进行添加进去。

代码

Pal_Scene_Battle.prototype.createAllWindows = function() {......this.createOtherCommandWindow();......
};
Pal_Scene_Battle.prototype.createOtherCommandWindow = function() {this._otherCommandWindow = new Window_OtherCommand();this._otherCommandWindow.setHandler('item', this.commandItem.bind(this));this._otherCommandWindow.setHandler('guard',  this.commandSkill.bind(this));this._otherCommandWindow.setHandler('allAttack',  this.commandJointAttack.bind(this));this._otherCommandWindow.setHandler('escape',   this.commandEscape.bind(this));this._otherCommandWindow.setHandler('status', this.selectPreviousCommand.bind(this));this._otherCommandWindow.setHandler('cancel', this.selectOtherCancelCommand.bind(this));this.addWindow(this._otherCommandWindow);
};

createAllWindows 方法中添加了创建 createOtherCommandWindow 方法的代码,而 createOtherCommandWindow 方法中创建了额外命令的窗口并绑定了按钮对应的实现,里面不少的方法是原始的方法或临时调用的方法。

Pal_Scene_Battle.prototype.commandOther = function() {this._otherCommandWindow.activate();this.selectNextCommand2();
};
Pal_Scene_Battle.prototype.selectNextCommand2 = function() {this.changeInputWindow();
};
Pal_Scene_Battle.prototype.selectPreviousCommand2 = function() {this.changeInputWindow();
};
Pal_Scene_Battle.prototype.selectOtherCancelCommand = function() {this._otherCommandWindow.close();this.selectPreviousCommand2();
};

这四个方法中commandOther 是上一篇中角色命令窗口的其他按钮所绑定的方法,作用是激活其他(额外)命令窗口,并进行下一个命令,其中调用了selectNextCommand2 方法,该方法调用了切换输入的窗口的方法;selectPreviousCommand2 是上一个命令的操作,这里加了2是区别原来的方法;selectOtherCancelCommand 方法是关闭其他命令窗口,并返回上一个命令。这里之所以这么绕是因为和原始代码保持一致,也保持一定的阅读性。

Pal_Scene_Battle.prototype.isAnyInputWindowActive = function() {return ......|| this._otherCommandWindow.active ||......);
};

该方法是判断窗口是否激活的,这里添加了其他命令窗口的激活判断。

Pal_Scene_Battle.prototype.changeInputWindow = function() {if (BattleManager.isInputting()) {if (BattleManager.actor()) {if(this._otherCommandWindow.active){this.startOtherCommandSelection();}else{this.startActorCommandSelection();}} else {this.startPartyCommandSelection();}} else {this.endCommandSelection();}
};

changeInputWindow 方法是切换输入窗口的,在这里面添加了对其他命令窗口激活的判断,激活了才执行打开其他命令窗口,否则打开角色命令窗口,这样需要创建的窗口和操作就完成了。

function Window_OtherCommand() {this.initialize.apply(this, arguments);
}Window_OtherCommand.prototype = Object.create(Window_Command.prototype);
Window_OtherCommand.prototype.constructor = Window_OtherCommand;Window_OtherCommand.prototype.initialize = function() {var y = Graphics.boxHeight - this.windowHeight();Window_Command.prototype.initialize.call(this, 0, y);this.move(15, 94, 128, 224);this.openness = 0;this.deactivate();this._actor = null;
};Window_OtherCommand.prototype.windowWidth = function() {return 128;
};Window_OtherCommand.prototype.numVisibleRows = function() {return 7;
};
//标准内边距
Window_OtherCommand.prototype.standardPadding = function() {return 0;
};//创建命令列表
Window_OtherCommand.prototype.makeCommandList = function() {if (this._actor) {this.addAttackCommand();this.addSkillCommands();this.addJointAttackCommand();this.addEscapeCommand();this.addOtherCommand();}
};
//添加道具命令
Window_OtherCommand.prototype.addAttackCommand = function() {this.addCommand(TextManager.item, 'item', this._actor.canAttack());
};
//添加防御命令
Window_OtherCommand.prototype.addSkillCommands = function() {this.addCommand(TextManager.guard, 'guard', this._actor.canAttack());
};
//添加围攻命令
Window_OtherCommand.prototype.addJointAttackCommand = function() {this.addCommand("围攻", 'allAttack', this._actor.canAttack());
};
//添加逃跑命令
Window_OtherCommand.prototype.addEscapeCommand = function() {this.addCommand(TextManager.escape, 'escape');
};
//添加状态命令
Window_OtherCommand.prototype.addOtherCommand = function() {this.addCommand(TextManager.status, 'status');
};Window_OtherCommand.prototype.setup = function(actor) {this._actor = actor;this.clearCommandList();this.makeCommandList();this.refresh();this.selectLast();this.activate();this.open();
};
Window_OtherCommand.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_OtherCommand.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 菜单代码修改来的,因此阅读起来没有任何负担,还是保持的原味!

效果

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
这样效果就完成了,但是可以看到没有对应的UI啊!!!
这就是下面需要做的事情了。

仿仙剑UI

现在基础的UI功能已经搭建好了,可以进行下一步的UI处理了!

代码

Window_OtherCommand.prototype.initialize = function() {......this.BattleCommand= ImageManager.loadSystem('FightExtend');......
};
Window_OtherCommand.prototype.update=function(){Window_Base.prototype.update.call(this);this.processCursorMove();this.processHandling();this._stayCount++;this.refresh();
}Window_OtherCommand.prototype.refresh=function(){this.contents.clear();if(this._actor){this.drawBattleOtherCommand();}
}
Window_OtherCommand.prototype.drawSx=new Map([[0,0],[1,128],[2,256],[3,384],[4,512]
]);
Window_OtherCommand.prototype.drawBattleOtherCommand=function(){var bitmap=this.BattleCommand;var sy=0;var sw=128;var sh=224;var dx=0;var dy=0;this.contents.blt(bitmap, this.drawSx.get(this._index), sy, sw, sh, dx, dy);
}

initialize 方法中添加了图片加载的操作;update 和 refresh 方法拿上一个菜单的简要修改下名称即可使用;drawSx 是Map写法的条件封装语句,用于封装判断后的X的位置;drawBattleOtherCommand 方法用于绘制需要绘制的UI图片,其中绘制时根据指令的下标选择对应的位置,然后传入绘制方法中去,这样可以节省不少冗余的代码。

效果

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
这样整理的效果就出来了,当然了,还有不少的地方没有处理,这些会在后期进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

slf4j 打印当前类和方法

spring initializr 自动包含依赖&#xff0c;也可以在 pom.xml 文件中添加 slf4j 的依赖&#xff0c;指定版本 例如我这边默认版本是 1.7.36 通过添加依赖修改版本为 1.7.32 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</arti…

Java微服务轻松部署服务器

我们在日常开发微服务之后需要再服务器上面部署&#xff0c;那么如何进行部署呢 1.首先需要对多个服务进行打成jar包放到服务器上 微服务一般maven文件有一个父类的pom.xml&#xff0c;需要将pom.xml删除在子类加上&#xff0c;不然会找不到主类 就是repackage这个配置&#…

Vue首屏优化方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。可以看个例子&#xff1a;…

uniapp无感登录封装

全局请求封装 https://blog.csdn.net/qq_42618566/article/details/109308690 无感登录封装 import {http} from "./index.js" let requestsQueue []; // 请求队列// 记录请求队列 export function recordRequests(path, params, loading, method) {requestsQueu…

vsCode html部分代码换行太多

使用vscode格式化文档的时候会出现这种情况 文件 -> 首选项 -> 设置 -> 搜索vetur -> 在setting.json中编辑。添加一下代码&#xff1a; "vetur.format.defaultFormatter.html": "js-beautify-html", "vetur.format.defaultFormatter.j…

音视频学习笔记——C++智能指针

C智能指针介绍 智能指针主要用于管理在堆上分配的内存&#xff0c;它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后&#xff0c;会在析构函数中释放掉申请的内存&#xff0c;从而防止内存泄漏。C 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法&#…

电梯机房秀

每天乘坐电梯&#xff0c;您见过电梯的机房吗&#xff1f;来&#xff0c;跟着小伍去看看吧。Lets go&#xff01; 电梯还能节能呢&#xff0c;您知道么&#xff1f;正好&#xff0c;小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

IBM:《2024年消费者调研:无处不在的人工智能彻底变革零售业》

1月17日&#xff0c;IBM商业价值研究院最近发布了第三份两年一度的消费者调研报告。 这项名为《无处不在的人工智能彻底改变零售业&#xff1a;客户不会等待》的报告&#xff0c;对包含中国在内的全球近20000名消费者进行了调研&#xff0c;相关结果反映了消费者对零售体验的普…

(黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_07&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小…

Figure 公司的Figure 01人形机器人

文章目录 Figure 公司管理层成员 人工智能驱动的积极未来路线图使命公司现在可能性解决方案我们该怎么做结论 Figure 公司 Figure 公司是一家人工智能科技公司&#xff0c;总部位于美国旧金山。该公司专注于开发人形机器人和相关技术&#xff0c;旨在为用户提供与人工智能交互…

抖音开放平台第三方开发,实现代小程序备案申请

大家好&#xff0c;我是小悟 抖音小程序备案整体流程总共分为五个环节&#xff1a;备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前&#xff0c;需要确保小程序基本信息已填写完成、小程序至少存在一个…

【Go语言】Go语言中的函数

Go语言中的函数 Go语言中&#xff0c;函数主要有三种类型&#xff1a; 普通函数 匿名函数&#xff08;闭包&#xff09; 类方法 1 函数定义 Go语言函数的基本组成包括&#xff1a;关键字func、函数名、参数列表、返回值、函数体和返回语句。Go语言是强类型语言&#xff0…