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

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

  • 三级战斗指令菜单
    • 效果
      • 代码
      • 完成效果
  • 下篇预告

三级战斗指令菜单

仙剑1中三级战斗的菜单内容如下:使用、投掷、装备这三项。

效果

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

代码

这里贴上完整的代码。。。

Pal_Scene_Battle.prototype.isAnyInputWindowActive = function() {
    return (this._partyCommandWindow.active ||
            this._actorCommandWindow.active ||
			this._otherCommandWindow.active ||
			this._itemCommandWindow.active ||
            this._skillWindow.active ||
            this._itemWindow.active ||
            this._actorWindow.active ||
            this._enemyWindow.active);
};

isAnyInputWindowActive 方法的判断中继续添加新的变量判断,将物品指令菜单的激活变量加入进去。

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

changeInputWindow 方法的判断中将额外和物品指令窗口的放在一起啊确保窗口打开是按照正确的顺序进行,然后再单独判断物品指令窗口是否激活。

Pal_Scene_Battle.prototype.createAllWindows = function() {
    this.createLogWindow();
    this.createStatusWindow();
    this.createPartyCommandWindow();		
    this.createActorCommandWindow();
	this.createOtherCommandWindow();
	this.createItemCommandWindow();
    this.createHelpWindow();
    this.createSkillWindow();
    this.createItemWindow();
    this.createActorWindow();
    this.createEnemyWindow();
    this.createMessageWindow();
    this.createScrollTextWindow();
};
Pal_Scene_Battle.prototype.createItemCommandWindow = function() {
    this._itemCommandWindow = new Window_ItemCommand();
    this._itemCommandWindow.setHandler('use', this.commandAttack.bind(this));
    this._itemCommandWindow.setHandler('throw',  this.commandAttack.bind(this));
    this._itemCommandWindow.setHandler('equip',  this.commandAttack.bind(this));
	this._itemCommandWindow.setHandler('cancel', this.selectItemCancelCommand.bind(this));
	//this._otherCommandWindow.changeTransparent();
	//this._actorCommandWindow.setHandler('escape', this.commandEscape.bind(this));
    this.addWindow(this._itemCommandWindow);
};

createItemCommandWindow 方法创建了物品指令菜单,并在createAllWindows 方法中添加进去物品指令菜单的创建方法。

Pal_Scene_Battle.prototype.startItemCommandSelection = function() {
    this._itemCommandWindow.setup(BattleManager.actor());
};
Pal_Scene_Battle.prototype.commandItem = function() {
	this._itemCommandWindow.activate();
	this.selectNextCommand2();
};
Pal_Scene_Battle.prototype.selectItemCancelCommand = function() {
    this._itemCommandWindow.close();
	this._otherCommandWindow.activate();
	this.selectPreviousCommand2();
};

这三个方法和上一篇中的额外指令操作方法一致,这里不再赘述,只需要换个操作的窗口即可。

function Window_ItemCommand() {
    this.initialize.apply(this, arguments);
}

Window_ItemCommand.prototype = Object.create(Window_Command.prototype);
Window_ItemCommand.prototype.constructor = Window_ItemCommand;

Window_ItemCommand.prototype.initialize = function() {
    var y = Graphics.boxHeight - this.windowHeight();
    Window_Command.prototype.initialize.call(this, 0, y);
	this.move(70, 158, 128, 160);
	this.BattleCommand= ImageManager.loadSystem('FightItem');
    this.openness = 0;
    this.deactivate();
    this._actor = null;
};

Window_ItemCommand.prototype.windowWidth = function() {
    return 128;
};

Window_ItemCommand.prototype.numVisibleRows = function() {
    return 5;
};
//标准内边距
Window_ItemCommand.prototype.standardPadding = function() {
    return 0;
};

//创建命令列表
Window_ItemCommand.prototype.makeCommandList = function() {
    if (this._actor) {
        this.addUseCommand();
        this.addThrowCommands();
        this.addJointAttackCommand();
    }
};
//添加道具使用命令
Window_ItemCommand.prototype.addUseCommand = function() {
    this.addCommand("使用", 'use', this._actor.canAttack());
};
//添加投掷命令
Window_ItemCommand.prototype.addThrowCommands = function() {
   this.addCommand("投掷", 'throw', this._actor.canAttack());
};
//添加装备命令
Window_ItemCommand.prototype.addJointAttackCommand = function() {
    this.addCommand(TextManager.equip, 'equip', this._actor.canAttack());
};

Window_ItemCommand.prototype.setup = function(actor) {
    this._actor = actor;
    this.clearCommandList();
    this.makeCommandList();
    this.refresh();
    this.selectLast();
    this.activate();
    this.open();
};

Window_ItemCommand.prototype.update=function(){
	Window_Base.prototype.update.call(this);
	this.processCursorMove();
	this.processHandling();
	this._stayCount++;
	this.refresh();
}

Window_ItemCommand.prototype.refresh=function(){
	this.contents.clear();
	if(this._actor){
		this.drawBattleItemCommand();
	}
}

Window_ItemCommand.prototype.drawSx=new Map([
	[0,0],
	[1,128],
	[2,256]
]);

Window_ItemCommand.prototype.drawBattleItemCommand=function(){
	var bitmap=this.BattleCommand;
	var sy=0;
	var sw=128;
	var sh=160;
	var dx=0;
	var dy=0;
	this.contents.blt(bitmap, this.drawSx.get(this._index), sy, sw, sh, dx, dy);
}

Window_ItemCommand.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_ItemCommand.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);
            }
        }
    }
};

这里由于复制使用了额外指令的代码,因此内容大同小异,但都可以看到行数那边数值与正常的有区别,那是进行对应的计算,但若修改后会发现绘制的图片被遮挡了,因此需要增大。

完成效果

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
这样具体的效果就完成了,这和原版仙剑可以说是一致的,当然现在还没有完成全部的UI效果,因此无法看到全部的完整的游戏效果出来。这里只要在创建窗口时将窗口背景透明,看着就更好了,现在暂时不做,不然不好进行其他的定位。

下篇预告

下一篇章进行的内容,会在战斗的状态菜单,法术菜单、物品菜单。装备菜单及状态菜单中选择一个进行开发制作,或是开始处理人物状态行走的相关开发,这也是一个大头的!!!

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

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

相关文章

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法,在众多文献均有应用。下面简述一下原理。 (1)量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念,它与经典比特不同,是因为它可以在同一时刻处于两个状态的…

Leet code 438 找到字符串中所有字母异位词

解题思路:滑动窗口 三步走 进窗口 判断 出窗口 然后更新结果 定义两个hash表在第一个表中存 p的有效字符 比如 abc a一个 b一个 c一个 这样就存在三个有效字符 在第二个hash表中进行滑动窗口的运行 定义一个常量count 如果滑动窗口中有效字符存在一个就…

string模拟实现

前言 上一期我们对STL进行了简单的介绍以及学习了string常用API的基本使用!本期我们来探索它的底层实现!自己对string的常用的接口进行模拟实现! 本期内容介绍 常用成员函数模拟实现 常用非成员函数模拟实现 成员函数 构造函数 在进行模拟…

计算机网络 谢希仁(001-2)

计算机网络-方老师 总时长 24:45:00 共50个视频,6个模块 此文章包含1.5到1.7的内容 1.5计算机网络类别 连通 共享 分类方法 广域网是边缘部分和核心部分的核心部分 以前是拨号连接 现在是光纤 总线型 星型 环形网 1.6计算机网络的性能 带上单位之后就不是…

git bash 命令行反应慢、卡顿(定位出根本原因)

参考该博主: https://blog.csdn.net/weixin_50212044/article/details/131575987?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131575987-blog-130024908.235v43pc_blog_bottom_relevance_base4&spm1001.210…

IP证书有什么作用?怎么申请?

关于IP地址证书,它的主要作用有这么几个点: 1.验明正身:就像身份证一样,它可以证明某个服务器的IP地址是真的、合法的,让咱知道咱们连接的就是正确的服务器,而不是冒牌货。这样一来,就可以降低像…

使用OpenCV实现人脸特征点检测与实时表情识别

引言: 本文介绍了如何利用OpenCV库实现人脸特征点检测,并进一步实现实时表情识别的案例。首先,通过OpenCV的Dlib库进行人脸特征点的定位,然后基于特征点的变化来识别不同的表情。这种方法不仅准确度高,而且实时性好&am…

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型。塑料制造行业作为重要的工业领域,亟需借助这一平台实现产业升级与转型,以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…

鸿蒙车载原生开发,拓展新版图

一天内连发“五弹”、HiCar 4.0首次上车 华为鸿蒙狂扩“汽车朋友圈”-上游新闻 汇聚向上的力量 3月15日,在“华为云&华为终端云服务创新峰会2024”上,华为首批汽车行业伙伴广汽传祺、岚图汽车、零跑汽车、凯翼汽车加入鸿蒙生态合作,华为…

Python - 应用篇 :ChatGPT +Pycharm 序列号自动生成

前言: 客户要求在产品外壳上新增可追溯的二维码贴花,二维码信息内容如下: 编码格式:SBD 零部件代码 控制盒序列号 控制盒厂家 例如:[)>06P725-18428S24031410001ZJL SBD 零部件代码:[)>06P725-184…

考研复习C语言进阶(3)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生: struct Stu { char name[20];//名字 int ag…

java-ssm-jsp-基于java的客户管理系统的设计与实现

java-ssm-jsp-基于java的客户管理系统的设计与实现 获取源码——》公主号:计算机专业毕设大全

Spring Cloud Gateway针对指定接口做响应超时时间限制

背景:我做的这个服务中存在要对大数据量做自定义统计的接口和大文件上传接口,接口响应用时会超过gateWay配置的全局用时,如果调整网关全局的超时时间和服务的全局超时时间是不合理的,故此想能否单独针对某个接口进行细粒度超时限制…

【应急响应靶场web2】

文章目录 前言 一、应急响应 1、背景 2、webshell查杀 3、日志排查 1)apache日志 2)nginx日志 3)ftp日志 4、隐藏账户 5、文件筛选 二、漏洞复现 总结 前言 靶场来源:知攻善防实验室 一、应急响应 1、背景 小李在某…

【C语言】—— 指针一 : 初识指针(上)

【C语言】—— 指针一 : 初识指针(上) 一、内存和地址1.1、如何理解内存和地址1.2、 如何理解编址 二、指针变量和地址2.1、取地址操作符 &2.2、 指针变量2.3、 解引用操作符 ∗ * ∗2.4、指针变量的大小 三、指针变量类型的意义3.1、 指…

LeetCode每日一题——两数之和

两数之和OJ链接:1. 两数之和 - 力扣(LeetCode) 题目: 思路: 在读懂题目后很多人觉得这种题目很简单,但是不管怎么写,在VS等其他编译器上能跑成功,但是在LeetCode上就是没办法通过。…

Java项目:54 springboot工资信息管理系统453

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的使用角色可以被分为用户和管理员, 用户具有注册、查看信息、留言信息等功能, 管理员具有修改用户信息,发…

【回归预测】基于SSA-RF(麻雀搜索算法优化随机森林)的回归预测 多输入单输出【Matlab代码#66】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 随机森林RF算法2. 麻雀搜索算法3. 实验模型4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 随机森林RF算法 …

微信小程序-webview分享

项目背景 最近有个讨论区项目需要补充分享功能,希望可以支持在微信小程序进行分享,讨论区是基于react的h5项目,在小程序中是使用we-view进行承载的 可行性 目标是在打开web-view的页面进行分享,那就需要涉及h5和小程序的通讯问…

重学SpringBoot3-函数式Web

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-函数式Web 函数式Web编程简介RouterFunctionRequestPredicateServerRequestServerResponse 好处示例结论 随着响应式编程范式的兴起和 Java 函数式编程能…