RPG Maker MV角色战斗动画记录

角色战斗动画记录

  • 角色战斗状态
    • 判断的语句
    • 赋值
  • 战斗管理
  • 战斗精灵
    • 创建精灵
    • 进行角色的更新

角色战斗状态

角色的战斗状态是由 Game_Battler 类中的 _actionState 属性的字符串决定的,它有哪些值呢?

  • undecided 未确定或者说是操作状态
  • inputting 输入
  • waiting 等待
  • acting 活跃
  • done 完成

其他类通过调用 Game_Battler 中判断的方法来确定部分值是否一致来操作人物的精灵。

判断的语句

Game_Battler.prototype.isUndecided = function() {return this._actionState === 'undecided';
};Game_Battler.prototype.isInputting = function() {return this._actionState === 'inputting';
};Game_Battler.prototype.isWaiting = function() {return this._actionState === 'waiting';
};Game_Battler.prototype.isActing = function() {return this._actionState === 'acting';
};

赋值

Game_Battler.prototype.setActionState = function(actionState) {this._actionState = actionState;this.requestMotionRefresh();
};

完成赋值后进行调用请求运动的更新方法,将运动刷新改变成 true 来控制刷新。

战斗管理

/** 战斗管理_变更演员* @param {Object} newActorIndex 新演员索引* @param {Object} lastActorActionState 最后一个演员操作状态*/
BattleManager.changeActor = function(newActorIndex, lastActorActionState) {var lastActor = this.actor();this._actorIndex = newActorIndex;var newActor = this.actor();if (lastActor) {lastActor.setActionState(lastActorActionState);}if (newActor) {newActor.setActionState('inputting');}
};

战斗精灵

Sprite_Actor.MOTIONS = {walk:     { index: 0,  loop: true  },//向前迈出一步wait:     { index: 1,  loop: true  },//正常待机chant:    { index: 2,  loop: true  },//吟唱待机guard:    { index: 3,  loop: true  },//保护damage:   { index: 4,  loop: false },//损坏evade:    { index: 5,  loop: false },//闪避thrust:   { index: 6,  loop: false },//刺swing:    { index: 7,  loop: false },//摆动missile:  { index: 8,  loop: false },//投掷skill:    { index: 9,  loop: false },//一般技能spell:    { index: 10, loop: false },//魔法item:     { index: 11, loop: false },//物品使用escape:   { index: 12, loop: true  },//逃跑victory:  { index: 13, loop: true  },//胜利dying:    { index: 14, loop: true  },//重伤abnormal: { index: 15, loop: true  },//异常状态sleep:    { index: 16, loop: true  },//睡眠dead:     { index: 17, loop: true  }//死亡
};

这里面可以看到对应战斗时精灵是有哪些动作的!
图片及链接:
战斗精灵
有兴趣的可以到这个图片连接的网站上看看!!!

创建精灵

Sprite_Actor.prototype.initMembers = function() {Sprite_Battler.prototype.initMembers.call(this);this._battlerName = '';this._motion = null;this._motionCount = 0;this._pattern = 0;this.createShadowSprite();this.createWeaponSprite();this.createMainSprite();this.createStateSprite();
};

这里面初始化了角色的成员,从上到下有战斗图片的名称,运动的动作变量,动作的运动计数,图案数字信息,创建了创建阴影精灵、武器精灵、主体精灵、状态精灵

进行角色的更新

本次探究不会太过深入及条理性的发出代码,请见谅!!!

Sprite_Actor.prototype.update = function() {Sprite_Battler.prototype.update.call(this);this.updateShadow();if (this._actor) {this.updateMotion();}
};
Sprite_Battler.prototype.update = function() {Sprite_Base.prototype.update.call(this);if (this._battler) {this.updateMain();this.updateAnimation();this.updateDamagePopup();this.updateSelectionEffect();} else {this.bitmap = null;}
};

父类调用了更新主体的方法,更新动画的方法等,自己调用了更新阴影,和运动的方法。
父类调用的主体中调用了角色类的图片更新方法,更新使用的对应角色的图片,之后调用帧的更新方法,更新了每个动作中对应的动画效果,之后更新移动和坐标点。

//更新图片
Sprite_Actor.prototype.updateBitmap = function() {Sprite_Battler.prototype.updateBitmap.call(this);var name = this._actor.battlerName();if (this._battlerName !== name) {this._battlerName = name;this._mainSprite.bitmap = ImageManager.loadSvActor(name);}
};

更新战斗的角色的图片

//更新战斗帧
Sprite_Actor.prototype.updateFrame = function() {Sprite_Battler.prototype.updateFrame.call(this);var bitmap = this._mainSprite.bitmap;if (bitmap) {var motionIndex = this._motion ? this._motion.index : 0;var pattern = this._pattern < 3 ? this._pattern : 1;var cw = bitmap.width / 9;var ch = bitmap.height / 6;var cx = Math.floor(motionIndex / 6) * 3 + pattern;var cy = motionIndex % 6;this._mainSprite.setFrame(cx * cw, cy * ch, cw, ch);}
};

**motionIndex **中是角色所在对应动作的帧,**pattern 是动作的动画帧,可以看到每个动作是3个动画帧,cx是横向的三个动作坐标,cy是纵向的6个动作的坐标。
其中可以看到
pattern **没有进行改变的值,那它是在哪改变的呢?

//更新运动
Sprite_Actor.prototype.updateMotion = function() {this.setupMotion();this.setupWeaponAnimation();if (this._actor.isMotionRefreshRequested()) {this.refreshMotion();this._actor.clearMotion();}this.updateMotionCount();
};
//更新该运动的计数
Sprite_Actor.prototype.updateMotionCount = function() {if (this._motion && ++this._motionCount >= this.motionSpeed()) {if (this._motion.loop) {this._pattern = (this._pattern + 1) % 4;} else if (this._pattern < 2) {this._pattern++;} else {this.refreshMotion();}this._motionCount = 0;}
};
//运动休眠
Sprite_Actor.prototype.motionSpeed = function() {return 12;
};

就是这里面进行了数字的变更。
最后需要根据操作变更动作,这里用了角色的刷新运动

//刷新运动
Sprite_Actor.prototype.refreshMotion = function() {var actor = this._actor;var motionGuard = Sprite_Actor.MOTIONS['guard'];if (actor) {if (this._motion === motionGuard && !BattleManager.isInputting()) {return;}var stateMotion = actor.stateMotionIndex();if (actor.isInputting() || actor.isActing()) {this.startMotion('walk');console.log("前进表演")} else if (stateMotion === 3) {this.startMotion('dead');} else if (stateMotion === 2) {this.startMotion('sleep');console.log("睡眠")} else if (actor.isChanting()) {this.startMotion('chant');console.log("魔法等待")} else if (actor.isGuard() || actor.isGuardWaiting()) {this.startMotion('guard');console.log("保护等待")} else if (stateMotion === 1) {this.startMotion('abnormal');console.log("异常状态")} else if (actor.isDying()) {this.startMotion('dying');console.log("重伤")} else if (actor.isUndecided()) {//是否犹豫(等待)this.startMotion('walk');console.log("是否犹豫")} else {this.startMotion('wait');console.log("前进1")}}
};

这些部分就行主要的精灵操作了。
看着这么些代码,觉得这游戏开发上很多东西还是耦合的挺多的,因此多事需要进行很多东西的修改也是发现是一件挺麻烦的一件事。

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

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

相关文章

QA 未能打开位于 D:/Computer999/Computer999.vbox 的虚拟电脑

前言 未能打开位于 xxx/Computer999.vbox 的虚拟电脑&#xff0c;并提示E_INVALIDARG (0X80070057)&#xff0c;是最常见的一个错误&#xff0c;下面是解决办法。 内容 1、提示下面的错误&#xff0c;注册Computer999失败&#xff1a; 未能打开位于 D:/Computer999/Compute…

K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动

今日开始学习K210视觉识别模块:简单的认识与串口程序 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 既然K210作为一个视觉识别外设模块来使用&#xff0c;我认为第一个程序 就没必要学点灯之类的了&#xff0c;直接学习串口如何配置开始为妥&…

ctfshow-web入门-爆破(web21-web24)

目录 1、web21 2、web22 3、web23 4、web24 1、web21 爆破什么的&#xff0c;都是基操 需要认证才能访问 随便输一个用户名和密码抓包看看&#xff1a; 多出来一个认证的头 Authorization: Basic YWRtaW46MTIzNDU2 base64 解码看看&#xff1a; 就是我们刚才输入的用于测…

C语言 | Leetcode C语言题解之第127题单词接龙

题目&#xff1a; 题解&#xff1a; struct Trie {int ch[27];int val; } trie[50001];int size, nodeNum;void insert(char* s, int num) {int sSize strlen(s), add 0;for (int i 0; i < sSize; i) {int x s[i] - ;if (trie[add].ch[x] 0) {trie[add].ch[x] size;m…

计算机系统结构之FORK和JOIN

程序语言中用FORK语句派生并行任务&#xff0c;用JOIN语句对多个并发任务汇合。 FORK语句的形式为FORK m&#xff0c;其中m为新领程开始的标号。 JOIN语句的形式为JOIN n&#xff0c;其中n为并发进程的个数。 例1&#xff1a;给定算术表达式ZEA*B*C/DF经并行编译得到如下程序…

刘强东的简历很拉风!

正式宣布&#xff1a;GPT 4o 在国内直接使用 ~ 来看一下江湖人称“东哥”刘强东的简历&#xff0c;大佬确实很拉风&#xff1a; 刘强东&#xff0c;京东的创始人&#xff0c;是中国互联网行业的传奇人物。他的故事充满了奋斗和创新&#xff0c;以下是我对他简历的一些看法&…

Vitis HLS 学习笔记--HLS流水线类型

目录 1. 简介 2. 优缺点对比 2.1 Stalled Pipeline 2.2 Free-Running/Flushable Pipeline 2.3 Flushable Pipeline 3. 设置方法 4. FRP的特殊优势 5. 总结 1. 简介 Vitis HLS 会自动选择正确的流水线样式&#xff0c;用于流水打拍函数或循环。 停滞的流水线&#xff…

K8S SWCK SkyWalking全链路跟踪工具安装

官方参考&#xff1a;如何使用java探针注入器? 配置两个demo&#xff0c;建立调用关系&#xff0c; 首先创建一个基础镜像dockerfile from centos 先安装java 参考: linux rpm方式安装java JAVA_HOME/usr/java/jdk1.8.0-x64 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH…

了解Maven,并配置国内源

目录 1.了解Maven 1.1什么是Maven 1.2快速创建一个Maven项⽬ 1.3Maven 核⼼功能 1.3.1项⽬构建 1.3.2依赖管理 1.4Maven Help插件 2.Maven 仓库 2.1中央仓库 2.2本地仓库 3.Maven 设置国内源 1.查看配置⽂件的地址 2.配置国内源 3.设置新项⽬的setting 1.了解Ma…

Hive安装-内嵌模式

1.官网下在hive3.1.2版本 Index of /dist/hive/hive-3.1.2 2.上传到master节点的/opt/software目录下 3.解压到/opt/module目录下 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/ 检查解压后文件 4.修改名字 改为hive cd /opt/module mv apache-hive-3.1.2-bin…

期权的时间价值是什么?和期权内在价值有啥不同?

今天带你了解期权的时间价值是什么&#xff1f;和期权内在价值有啥不同&#xff1f;期权的内在价值&#xff0c;是指期权立即执行产生的经济价值。 期权的时间价值是什么&#xff1f; 期权的时间价值是期权价格的一个重要组成部分&#xff0c;也被称为期权的外在价值。它是指期…

【再探】设计模式—备忘录模式与解释器模式

备忘录模式是用于保存对象在某个时刻的状态&#xff0c;来实现撤销操作。而解释器模式则是将文本按照定义的文法规则解析成对应的命令。 1 备忘录模式 需求&#xff1a;保存对象在某个时刻的状态&#xff0c;后面可以对该对象实行撤销操作。 1.1 备忘录模式介绍 提供一种状…

RK3568笔记二十九:RTMP推流

若该文为原创文章&#xff0c;转载请注明原文出处。 基于RK3568的RTMP推流测试&#xff0c;此代码是基于勇哥的github代码修改的&#xff0c;源码地址MontaukLaw/3568_rknn_rtmp: rk3568的推理推流 (github.com) 感兴趣的可以clone下来测试。 也可以下载修改后的代码测试。Y…

普华永道信任危机:上市公司解约风波与反思

在全球会计业界的星空中&#xff0c;普华永道无疑是那颗最为耀眼的星之一。然而&#xff0c;近日这颗星却遭遇了前所未有的信任危机。这家大名鼎鼎的四大会计师事务所之一&#xff0c;近期陷入了上市公司解约的风波之中&#xff0c;其声誉与地位正面临严峻挑战。 就在昨晚&…

Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解

目录 1.前言2. Vivado Webpack下载、安装3.本地文件下载安装 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 本人自本科大二开始接触FPGA相关知识&#xff0c;现已将近六年&#xff0c;由于一直在上学&#xff0c;也不是一直在搞FPGA&#xff0c;但是也完成过一些项目…

【学习】企业如何选择一个合适的DCMM咨询机构

DCMM是我国首个数据管理领域正式发布的国家标准。旨在帮助企业利用先进的数据管理理念和方法&#xff0c;建立和评价自身数据管理能力&#xff0c;持续完善数据管理组织、程序和制度&#xff0c;充分发挥数据在促进企业向信息化、数字化、智能化发展方面的价值。该标准借鉴了国…

数据仓库核心:维度表设计的艺术与实践

文章目录 1. 引言1.1基本概念1.2 维度表定义 2. 设计方法2.1 选择或新建维度2.2 确定维度主维表2.3 确定相关维表2.14 确定维度属性 3. 维度的层次结构3.1 举个例子3.2 什么是数据钻取&#xff1f;3.3 常见的维度层次结构 4. 高级维度策略4.1 维度整合维度整合&#xff1a;构建…

IDEA 学习之 疑难杂症系列

IDEA 学习之 疑难杂症系列 1. Mapstruct 编译空指针问题 1.1. 现象 NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifest1.2. 原因 MapStruct 在 IDEA 2020.3 版本编译 NPE 问题 1.3. 解决办法 2. IDEA 学习之 编译内…

python列表的进阶

小结&#xff1a; # 列表的删除小结&#xff1a; # 删除列表的最后一列 punished students.pop() print(被罚站的人是&#xff1a; punished &#xff0c;同学们引以为戒。)# 根据下标删除 del students[0]#根据名称删除 students.remove(王熙凤)在今天的课程里&#xff0c…

绿联 安装SeaTable在线协同表格

绿联 安装SeaTable在线协同表格 1、镜像 seatable/seatable-developer:latest 2、安装 2.1、基础设置 重启策略&#xff1a;容器退出时总是重启容器。 2.2、网络 网络选择桥接(bridge)。 2.3、存储空间 装载路径/shared不可变更。 2.4、端口设置 容器端口固定80&#x…