【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图片,其中绘制时根据指令的下标选择对应的位置,然后传入绘制方法中去,这样可以节省不少冗余的代码。

效果

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(一)

聚酰亚胺PI的基本概念 聚酰亚胺(Polyimide,简称PI)是一种重要的高性能聚合物材料。是指主链上含有酰亚胺环的一类聚合物,是综合性能最佳的有机高分子材料之一。它具有最高的阻燃等级(UL-94),以及…

C语言从入门到实战————数组和指针的深入理解

前言 在C语言中,数组和指针有的密切得联系,因为数组名本身就相当于一个指针常量。指针是一个变量,专门用来存储另一个变量的内存地址,通过这个地址可以访问和操作该变量的值,同时也包括数组。数组是一组连续存储的同类…

离线安装数据库 mysql 5.7 linux

离线安装数据库 mysql 5.7 linux 方法一 参考链接Linux(Debian10.2)安装MySQL5.7.24环境 赋予文件执行权限chmod x 文件名 使用root用户sudo su解压文件tar xvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz重命名mv mysql-5.7.42-linux-glibc2.12-x86_64 mysql将桌面的mys…

【WSL】Windows wsl2 子系统忘记密码,重置修改用户密码

1.问题 windows 子系统 ubuntu 忘记密码,sudo 命令无法使用,需要重置密码 2. 解决 使用 wsl 命令进行修改,打开 cmd 窗口 # root 打开 wsl --user root # 修改 root 密码 passwd root # 修改用户密码 passwd username

【ARM】DS中Coretex-M处理器的常用寄存器介绍

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 了解ArmDS中Coretex-M处理器的常用寄存器的名称及作用。 2、 问题场景 在对Coretex-M处理器进行开发时,了解常用寄存器的名称及作用,可以: 编写正确的程序: 寄存器是程序员用…

AI会取代低代码吗?——探讨两者在软件开发中的角色和关系

引言 在当今快速发展的数字化时代,软件开发已成为企业和商户必不可少的一项工作。为了应对不断增长的需求和日益复杂的业务要求,开发人员和企业正在寻求更加高效、快速的软件开发解决方案。在这样的背景下,低代码开发平台和人工智能&#xf…

【嵌入式开发·Arduino板】I2C接口通讯及应用 | 串口通讯实例 | I2C的类库函数,I2C接口的应用

“跟猫学,保持冷漠,适当撒娇,几乎不动心。跟猪学,保持食欲,充足睡眠,几乎不烦恼。” 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域…

集合系列(四) -LinkedHashMap详解

一、摘要 在集合系列的第一章,咱们了解到,Map的实现类有HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties等等。 本文主要从数据结构和算法层面,探讨LinkedHashMap的实现。 二、简介 LinkedHashMap可…

虚拟机网络链接

在虚拟网络设置中找到如下界面: "子网 IP" 192.168.79.0/24 表示一个局域网络,它有254个可能的IP地址可供分配(192.168.79.1到192.168.79.254),255.255.255.0 是子网掩码,定义了网络和主机部分。…

python练习一

1. 五个PPT上的界面打印【print、input函数】 print("\t\t\t\t\t英雄联盟商城登录界面\n~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~ * ~\n\t\t\t\t\t1. 用户登录\n\t\t\t\t\t2. 新用户注册\n\t\t\t\t\t3. 退出系统\n" "~ * ~ * ~ * ~ * ~ * ~ * ~…

代码随想录算法训练营第二十三天 | 77. 组合

回溯 77. 组合 题目链接&#xff1a;https://leetcode.cn/problems/combinations/ 文章讲解&#xff1a;https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ti4y1L7cv/ class Solution { private:vector<…

菜刀HTTPTCP后门分析+防范

“菜刀”对于渗透测试者来说耳熟能详&#xff0c;但是大家用的菜刀真的安全吗&#xff1f;你能保证你所使用的工具不会被别人偷偷的塞入后门吗&#xff1f; 如果菜刀中被塞入后门 那我们岂不是成了别人的苦力。辛辛苦苦打下的shell就这样不知不觉的被别人窃取&#xff0c;怎能…

springboot271制造装备物联及生产管理ERP系统

制造装备物联及生产管理ERP系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装制造装备物联及…

Grass推出Layer 2 Data Rollup

Grass推出Layer 2 Data Rollup Grass邀请链接最新资讯 Grass邀请链接 欢迎使用我的邀请码进行注册: 邀请链接 如果你还不知道注册流程&#xff1a;详见Grass: 出售闲置带宽实现被动收入 最新资讯 简讯&#xff1a;2024年3月13日&#xff0c;Grass宣布正在建立基于Solana的La…

低噪声、低电压、低功耗运放,应用广泛—— D722 9MHz,轨对轨I/O CMOS运放

产品简介 D722是低噪声、低电压、低功耗运放&#xff0c;应用广泛。D722具有9MHz的高增益带宽积&#xff0c;转换速率为8.5V/μs&#xff0c;静态电流为1.7mA&#xff08;5V电源电压&#xff09;。 D722具有低电压、低噪声的特点&#xff0c;并提供轨到轨输出能力&#xff0c;D…

矿洞隧道漫游可视化:探索地心深处的奇幻世界

在这个充满好奇与探索的时代&#xff0c;我们总是渴望揭开世界的神秘面纱&#xff0c;探寻那些深藏在地球内部的奥秘。 矿洞隧道漫游可视化系统通过先进的计算机图形学、虚拟现实和三维建模技术&#xff0c;将矿洞隧道的真实场景进行高精度还原&#xff0c;让我们仿佛置身于一个…

云原生应用(4)之阿里云镜像加速以及镜像仓库

一、容器镜像加速器 1.1 获取阿里云容器镜像加速地址 登录阿里云。 1.2 配置Docker daemon加速器 添加daemion.json文件。 添加daemon.json配置文件 # vim /etc/docker/daemon.json # cat /etc/docker/daemon.json { "registry-mirrors": ["https://s…

基于Java+Springmvc+vue+element实现大学生科技创新创业项目管理系统

基于JavaSpringmvcvueelement实现大学生科技创新创业项目管理系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…

酷开科技深度切入生活,为品牌方带来确定性增长

在流量稀缺的年代&#xff0c;如何能让营销更出众&#xff1f;流量所在&#xff0c;就是营销所在&#xff0c;就是消费互联网的主战场。社交平台和信息流平台的融合&#xff0c;是两个互联网底层逻辑的驱动&#xff0c;而流量搅动的背后&#xff0c;是互联网世界的底层逻辑在一…

什么是React属性钻取(Prop Drilling)

一、介绍 在React开发过程中&#xff0c;状态管理是一个绕不开的话题。无论是新手还是有经验的开发者&#xff0c;都会面临如何有效管理组件状态的挑战。React为我们提供了多种状态管理方案&#xff0c;如直接的状态传递&#xff08;俗称"属性钻取"&#xff09;、Co…