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

news2024/12/25 23:43:35

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方法分别是进行更新和刷新指令图标的,这样后期若是需要人物不能操作时就可以实现效果。

效果

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

层级关联,审批人功能

一个需求要求选择一级&#xff0c;下方展示一级的效果 后端给了审批人数据&#xff0c;但是数据需要单独处理 <template><div class"box"><el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"…

【鸿蒙系统学习笔记】ArkTS开发语言

一、背景 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 二、基本语法 2.1、基本语法介绍 ArkTS的基本组成&#xff0c;资料来自…

【洛谷题解】P8627 [蓝桥杯 2015 省 A] 饮料换购

题目链接&#xff1a;[蓝桥杯 2015 省 A] 饮料换购 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;换购 题意&#xff1a; 分析&#xff1a;一直换购直至瓶盖数<3为只 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {i…

极其抽象的SpringSecurity理解

原始&#xff1a;A → B Security&#xff1a;A → S → B 太抽象了&#xff0c;看不懂啊T_T 抽象故事 故事大概&#xff1a;C是一个大区&#xff0c;拥有巨大的火力&#xff08;C准备联合B吞并掉A&#xff09;&#xff0c;A得到了这个消息&#xff0c;…

java:Java中的逻辑控制

顺序结构 在Java中&#xff0c;顺序结构是指代码按照从上到下的顺序依次执行。以下是一个简单的Java程序示例&#xff0c;展示了顺序结构的使用&#xff1a; public class SequenceStructureExample {public static void main(String[] args) {// 声明和初始化变量int num1 10…

51-2 万字长文,深度解读端到端自动驾驶的挑战和前沿

去年初&#xff0c;我曾打算撰写一篇关于端到端自动驾驶的文章&#xff0c;发现大模型在自动驾驶领域的尝试案例并不多。遂把议题扩散了一点&#xff0c;即从大模型开始&#xff0c;逐渐向自动驾驶垂直领域靠近&#xff0c;最后落地到端到端。这样需要阐述的内容就变成LLM基础模…

SAP PP学习笔记 - 豆知识05 - 如何定义品目状态,如何删除品目,如何扩张品目

本章讲SAP 中一些常用操作。 - 设定品目状态&#xff1a;控制让一个品目&#xff08;物料&#xff09;准备好了以后再提供出来给大家 - 删除品目&#xff1a;一般来说是逻辑删除&#xff0c;但是做了归档之后&#xff0c;也可以物理删除 - 扩张品目&#xff1a;品目的View非…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇

1.简介 上一篇中&#xff0c;主要是介绍了拖拽的各种方法的理论知识以及实践&#xff0c;今天宏哥讲解和分享一下划取字段操作。例如&#xff1a;需要在一堆log字符中随机划取一段文字&#xff0c;然后右键选择摘取功能。 2.划取字段操作 划取字段操作就是在一段文字中随机选…

[BUUCTF]-PWN:axb_2019_heap解析(格式化字符串漏洞,unlink,off by one)

查看保护 查看ida 大致就是alloc创建堆块&#xff0c;free释放堆块&#xff0c;以及fill填充堆块 解释get input函数&#xff1a; 这里解释一下get input函数 这个函数是人工编写的&#xff0c;其中*v410那里是把接受到的换行符变为\x00&#xff0c;并且结束输入。 v3那里&a…

单调队列和优先队列

本篇记录下一下关于单调队列和优先队列&#xff08;堆&#xff09;的方法以及解题思路. 文章目录 一. 单调队列1. 绝对差不超过限制得最长连续子数组2. 跳跃游戏 VI3. 设计自助结算系统4. 和至少为k的最短子数组5. 满足不等式的最大值 二. 优先队列1. 最后一块石头的重量2. 数据…

CoWoS封装产能短缺挑战AI芯片市场需求

随着人工智能、云计算、大数据分析和移动计算等技术的蓬勃发展&#xff0c;现代社会对计算能力的需求日益高涨。然而&#xff0c;在先进制程突破3纳米后&#xff0c;晶圆尺寸遭遇缩放极限&#xff0c;制造成本也随之上升。因此&#xff0c;除了继续研发先进制程外&#xff0c;半…

网络防火墙综合实验

备注&#xff1a;电信网段15.1.1.0 移动网段14.1.1.0 办公区 11.1.1.0 生产区 10.1.1.0 服务区 13.1.1.0 公网 1.1.1.1 和 2.2.2.2 需求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网&#xff08;多对多nat&#xff0c;并且需要保留一个公网ip&#xff09; 2、…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇&#xff1a; C#&#xff0c;入门教程(04)——Visual Studio 2022 数据编程实例&#xff1a;随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#xff0c;可读性往往很差。 今天一问才知道&#xff0c;他们居然不…

使用go-llama.cpp 运行 yi-01-6b大模型,使用本地CPU运行,速度挺快的

1&#xff0c;视频地址 2&#xff0c;关于llama.cpp 项目 https://github.com/ggerganov/llama.cpp LaMA.cpp 项目是开发者 Georgi Gerganov 基于 Meta 释出的 LLaMA 模型&#xff08;简易 Python 代码示例&#xff09;手撸的纯 C/C 版本&#xff0c;用于模型推理。所谓推理…

CMake无Name和Value部分界面

鼠标会变成以下 拉开后就 出现想要的部分

SpaceX 发射军用卫星,用于跟踪高超音速导弹

上周三&#xff0c;导弹防御局的两颗原型卫星和美国太空军的四颗导弹跟踪卫星搭乘 SpaceX 猎鹰 9 号火箭从佛罗里达州太空海岸进入轨道。 这些卫星是新一代航天器的一部分&#xff0c;旨在跟踪中国或俄罗斯发射的高超音速导弹&#xff0c;以及可能来自正在开发自己的高超音速武…

蓝桥杯:C++贪心算法、字符串函数、朴素模式匹配算法、KMP算法

贪心算法 贪心(Greedy)算法的原理很容易理解&#xff1a;把整个问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直到所有步骤结束&#xff1b;每个步骤都不考虑对后续步骤的影响&#xff0c;在后续步骤中也不再回头改变前面的选择。 贪心算法…

折叠式隐形纱窗原理

如果出现上轨与下轨不同步&#xff0c;可分析是否是某些绳子被拉长导致的。 以上图现象为例&#xff0c;可调整折叠纱窗一侧上部分的4跟组织线长度。从而解决上轨与下轨拉动不同步的问题。

【天衍系列 01】深入理解Flink的 FileSource 组件:实现大规模数据文件处理

文章目录 01 基本概念02 工作原理03 数据流实现04 项目实战4.1 项目结构4.2 maven依赖4.3 StreamFormat读取文件数据4.4 BulkFormat读取文件数据4.5 使用小结 05 数据源比较06 总结 01 基本概念 Apache Flink 是一个流式处理框架&#xff0c;被广泛应用于大数据领域的实时数据…

报表开发工具DevExpress .NET Reporting v23.2亮点 - 支持智能标签

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v23.2…