rpg maker mv的rpgmakermv插件怎么用写

RPG Maker MV 插件制作入门(1)
时间: 10:03:53
分类 : JavaScript/jQuery
本文为RPG Maker MV所使用的基于JavaScript的Game Scripting System (JGSS) 插件入门资料。需要有一定的JS(JavaScript)基础知识。
创建插件文件
以下为我经常使用的插件模板文件。
//=============================================================================
// RTK_Test.js
// The MIT License (MIT)
//=============================================================================
* @plugindesc 测试用插件
* @author Toshio Yamashita (yamachan)
* @help 本插件不包含插件指令。
* 由于是测试用的文件,实际使用的时候请适当重命名
(function(_global) {
// 这里写上插件处理
下载点此-&
下图为RPG Maker MV的插件管理页面。JS中的注释@plugindesc 和 @author 行会各自显示在相应的位置。
开发工具与游戏变量的基础
游戏中经常使用的变量,会以$data开头。其作为游戏基本的数据,会通过RPG Maker MV自动生成,data文件以*.json的形式保存。这些文件会在游戏开始时读取,基本上是不会发生变更的静态数据,本指导中会将这些称之为「$data变量」,被保存的值则称为「静态数据」。
与其对应的以$game开头的变量,在游戏内被使用,被更新的动态数据,这些都会保存在存档中。在本指导中将其称为「$game变量」,被保存的值则称之为「动态数据」。
在RPG Maker MV中测试游戏的时候按下F8就会启动开发工具。开发工具中的控制台是非常便利的东西。
实际启动控制台,输入$data 后,以$data 开头的变量会提示出一堆。$game也同样。控制台中的提示辅助功能,对帮助理解游戏内的状态有很大的帮助。
关于$data变量的第一个$dataActors,让我们稍微看一下吧。在控制台上选择这个变量名,然后按下回车键显示内容。
$dataActors的长度为5,第一个元素为null,其他四个为Object。那么我们输入$dataActors[1] 来获取第一个Object。
在$dataActors[1]中的name显示角色设定名为 "挑战者" 。其他还有各种设定,但因为是$data变量,这些基本都是在数据库中所设定的值。
最下面的_proto_是这个Object的父元素,但因为是Object,并没有设置上级的类,只是单纯用作数据的Object。
那么接下来看下$game变量的第一个$gameActors 。
展开_proto_,这次不是单纯的数据Object,有定义名为Game_Actors的类。
Game_Actors类中,定义了一个名为actors的函数。在控制台上输入这个函数名后,就能看到这个函数的定义(源码文件)。右边显示了这个js文件的名称和行数,想要知道更详细的内容不妨点击对照下源码。
控制台是非常便利的工具,请务必活用。
稍微多讲点 - 关于数据的阶层
研究下RPG Maker MV所生成的游戏,$data静态的世界(变量的定义)和$game动态的世界相当好的分离了开来。
系统开发遵循了MVC(Model-View-Control)模型,个人觉得$data的世界是Model,$game的世界接近Contorol层。
比如之前的Game_Actors中有actors函数。一眼看过去好像是一个很便利的函数,但是我觉得有如下设计意图。
$game层与$data层分离
& & $game Object只能知道最低限度的$data Object
& & 从$game Object角度出发,$data层是抽象化的
稍微有点难,再讲得琐碎点就是。
不用知道$game Object 在$game层是怎么被Actor管理的
& & $game Object想要知道 Actor 的情报的话,往往会通过Game_Actors&
Game_Actors这个类,是掌管$game世界关于Actor的全部的存在。就是SPE(single point of entry) 。将$game世界和$data世界进行适当的分离。
所以作为插件开发者,会写操作 $game 这边的很多代码。
var anActor = $dataActors[id];
var anActor = $gameActors.actors(id);
想要参阅角色情报的话,下面那行代码可能更合适。
写一个简单的插件吧!
前文有点过长了呢。总之第一步,我们先做一个简单的插件吧。
因为前面提到了Actor,所以我们稍微调戏下名字吧。首先我们在控制台或者源文件的rpg_objects.js中找到定义的函数。
Game_Actor.prototype.name = function() {
return this._
非常简单的内容呢。那么我们在名字后面加上ID吧。在先前介绍的插件文件中,写上插件处理。
(function(_global) {
// 这里写上插件处理
Game_Actor.prototype.name = function() {
return this._name + ":" + this.actorId();
指令等目前还没改写,总之先运行下。
是不是很简单?
防止与其他插件冲突
在先前的例子中,我们调戏了Actor的名字。这个功能也不是完全没用,至少在开发的时候能用来检查ID。
这个插件自己用大概是没什么问题。但是,在网上公开,或者给别人用还是算了。现阶段这个插件并没有考虑冲突问题,是一个会造成麻烦的插件。
设想有一个插件有着相同的构造,同样是一款影响角色名字的插件。于是,两个插件一起读取后,最终会显示哪个?结果大概是先读取的被后读取的覆盖,然后执行后读取的。
就像争夺场地一样。Game_Actor.prototype.name这个函数所定义的场地只有一个,所以定义就会覆盖,前面的定义消失,只有最后的定义生效。这就是最简单易懂的插件冲突例子。
解决这个问题非常简单,不要覆盖定义,追加就好了。就像下面的代码。
(function(_global) {
// 这里写上插件处理
var _Game_Actor_name = Game_Actor.prototype.
Game_Actor.prototype.name = function() {
var ret = _Game_Actor_name.call(this);
return ret + ":" + this.actorId();
准备_Game_Actor_name这个变量,将前面的定义先保存起来。然后运行自己的插件代码的时候,先将保存的定义(函数)执行。再基于执行后的值,将自己处理的,也就是在末尾追加“:”和ID执行。
这个时候,想实现的处理和原来的值并无冲突。如果是要实现「和原先定义无关,在名字的地方只显示ID」这样一个插件的话,只用按照如下来写。
(function(_global) {
// 这里写上插件处理
var _Game_Actor_name = Game_Actor.prototype.
Game_Actor.prototype.name = function() {
var ret = _Game_Actor_name.call(this);
return String(this.actorId());
即便是不使用作为返回值的ret,也要将原先的定义提出来是一个「很好的礼仪」。在这个世界中有许许多多的插件,有许多意想不到的理由来使用函数的情况。所以,这个值哪怕是不使用,将函数单独拎出来,就能够防止插件之间的冲突。
制作插件不能只考虑自己逻辑上的效率,无时无刻考虑避免影响其他插件的运作,是一个非常重要的意识。
然后这里所使用的call函数,具体请参阅 JavaScript 参考书什么的。但是希望有一点不要忘记,下面这样的函数所获取到的参数(这次是name)请不要忘记传递给原本的定义。
(function(_global) {
// 这里写上插件处理
var _Game_Actor_setName = Game_Actor.prototype.setN
Game_Actor.prototype.setName = function(name) {
var ret = _Game_Actor_setName.call(this, name);
// 这里写上自己的处理代码
上面的例子中,如果有其他返回的值就原封不动返回。现在setName函数什么都没有返回,所以最后的retuen没有意义。但是将来版本升级可能会有什么值返回过来,或者有什么会返回过来的插件存在。所以附上比较安心。
稍微多讲点 - 局部作用域
如上面的例子定义了一个_Game_Actor_setName的变量,这个变量只会在这个插件中有效,并不会影响其他插件。所以只要不与这个插件中的名字冲突,基本不怕和其他插件冲突。
这就是一般的局部变量的概念,在JavaScript中简单的「在函数中定义的定义(变量等)就会成为只在函数内有效」
(function(_global) {
// 这里写上插件处理
// 这里定义的函数和变量只在这个范围内有效
因为这是JavaScript相关的话题,只是简单说明下。具体请查阅相关书籍和网站来学习。
题外话,插件中对于保持函数定义的变量名,可以基于原本的函数定义
开头加上下划线(_)
中途的点或者.prototype.的部分改写成下划线(_)
有如上命名习惯的插件作者有很多,我也是。
查阅参数吧!
这次试下利用插件参数吧。在插件的注释部分,@author的下面追加下面的注释。
* @param 角色名后显示ID
* @desc 角色名后显示ID (0:OFF 1:ON)
* @default 1
于是插件管理界面就有如下的参数。
如下图能够变更值。
那么,看下这个设定值在插件端的样子。以下是我常用的书写方式。
(function(_global) {
// 这里写上插件处理
var N = 'RTK_Test';
var param = PluginManager.parameters(N);
var show_id = Number(param['角色名后面显示ID'])||1;
// 以下略…
关于PluginManager.parameters 函数,通过以下的定义理解起来会比较快。可以明白大小写并没有关系(toLowerCase())。
PluginManager.parameters = function(name) {
return this._parameters[name.toLowerCase()] || {};
最初的插件的名字定义变量‘N’纯属是本人的个人习惯。但是插件的名字可能会在代码中多次使用,将来也可能会改变文件名字,推荐开始的时候以某种形式来定义会方便日后使用这个定义。
定义的面板值会进入show_id ,最后的 ||1 是默认值。如果使用者在插件参数里输入了非数字的值,那么通过 Number() 函数会返回 NaN 。这个情况下 ||1 会发挥作用将值替换成 1 。
||1 &是 JavaScript方式的省略写法,实际运行结果和下面的if语句处理是差不多一样的。
var show_id = Number(param['角色名后面显示ID']);
if (show_id != 0) {
show_id = 1;
那么利用这个值在插件内部来处理 ON/OFF 吧。
(function(_global) {
// 这里写上插件处理
var N = 'RTK_Test';
var param = PluginManager.parameters(N);
var show_id = Number(param['角色名后面显示ID'])||1;
var _Game_Actor_name = Game_Actor.prototype.
Game_Actor.prototype.name = function() {
var ret = _Game_Actor_name.call(this);
if (show_id) {
return ret + ":" + this.actorId();
嗯,没问题能跑起来。
但是 show_id 的值从外部无法变更话,为了不给游戏多余的负担,个人喜欢如下的写法。
(function(_global) {
// 这里写上插件处理
var N = 'RTK_Test';
var param = PluginManager.parameters(N);
var show_id = Number(param['角色名后面显示ID'])||1;
if (show_id) {
var _Game_Actor_name = Game_Actor.prototype.
Game_Actor.prototype.name = function() {
var ret = _Game_Actor_name.call(this);
return ret + ":" + this.actorId();
感觉只是爱好问题。只要有「show_id 的值从外部不会变更」这个条件,就自问一开始函数的替换本身是需要的吗?
但是,从接下来的章节开始,「show_id的值会从外部被改变」,所以在后面的例子中并没有使用。只是单纯的让人知道还有这种写法,仅供参考。&
通过指令来改变运作吧!
插件参数是用于游戏开发者设定插件用的,所以在实际游戏中无法自由变更。如果要在游戏中变更的话,就需要使用插件指令。
指令的标准如下。
RTK_Test show_id on
RTK_Test show_id off
那么,就让我们试着处理指令部分吧。追加Game_Interpreter.prototype.pluginCommand函数,处理插件独自的指令。
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginC
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command == N) {
if (args[0] == "show_id") {
if (args[1] == "on") {
show_id = 1;
} else if (args[1] == "off") {
show_id = 0;
在pluginCommand函数中,最初的指令名是通过command参数传进来。因为很明显这个指令名是配合插件名的,所以这次也就配合事前定义的N来做比较确认。确认给自己的指令后,处理参数args,改变show_id变量的值。
这样子就能够通过事件中的插件指令,来控制开关游戏中ID的显示。
总之完成了
姑且是将功能写出来了,这次就先这样吧!
一个给角色名字追加ID显示的简单插件。可以通过插件参数来设定最初是否显示,然后游戏中通过插件指令来开关显示。
但是有一个缺点就是状态无法保存。这个作为下次的课题来攻克吧!
以下就是这次所写的全部源代码。文件名和注释写好了的话,作为插件公开是没问题了吧。不过,是否真的需要这种插件就是另外个问题了...
//=============================================================================
// RTK_Test.js
// The MIT License (MIT)
//=============================================================================
* @plugindesc 测试用插件
* @author Toshio Yamashita (yamachan)
* @param 角色名后面显示ID
* @desc 角色名后面显示ID (0:OFF 1:ON)
* @default 1
* @help 本插件包含插件指令。
* 由于是测试用的文件,实际使用的时候请适当重命名
(function(_global) {
// 这里写上插件处理
var N = 'RTK_Test';
var param = PluginManager.parameters(N);
var show_id = Number(param['角色名后面显示ID'])||1;
var _Game_Actor_name = Game_Actor.prototype.
Game_Actor.prototype.name = function() {
var ret = _Game_Actor_name.call(this);
if (show_id) {
return ret + ":" + this.actorId();
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginC
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command == N) {
if (args[0] == "show_id") {
if (args[1] == "on") {
show_id = 1;
} else if (args[1] == "off") {
show_id = 0;
制作各种插件,尝试乐在其中。
那么,再会!当前位置: >
> RPG Maker MV(RPG制作大师MV) 1.5.0 免费汉化破解版(附注册机+语言包)
RPG Maker MV(RPG制作大师MV) 1.5.0 免费汉化破解版(附注册机+语言包)
RPG Maker MV汉化破解版下载
软件大小:570MB
软件语言:多国语言
软件类型:
软件授权:免费软件
更新时间:
软件类别:编程工具
软件官网:
应用平台:
网友评分:
软件介绍人气软件下载地址相关文章
微软发布了最新的 Visual Studio 2010 软件开发编程平台及 .Net Framework 4 框架。这次 VisualStudio 2010 包括 Professional 专业版、Premium 白金版、Ultimate 旗舰版、Visual Studio 2012 是一个综合性产品系列,适用于每一位希望升级或创建精彩应用程序的组织、团体和个人开发人员首先需要先下载 Myeclipse 2014 官方安装文件,然后按照安装说明操作即可Java SE Development Kit 7官方下载,JDK是Java开发环境。JAVA语言恐怕是稳居网路应用程序语言的首选了,这都要归功于它高度的安全性以及跨平台的特性,几乎在目前所有的电经过了MyEclipse 8.5 M1和MyEclipse 8.5 M2两个版本,MyEclipse Enterprise Workbench 8.5 for Eclipse 3.5.2终于在昨天正式发布了!在官方网站上 MyEclipse 8.5 可以下载Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插WebStorm 是jetbrains公司旗下一款JavaScript 开发工具,喜欢的朋友抓紧下载吧易语言是一门计算机编程语言。以中文作为程序代码表达的语言形式。本平台提供易语言5.5完美破解版免费下载,内附破解补丁,完美破解找到SETUP文件夹下的setup.sdb,用记事本打开它,找到[Product Key],将下面的一行序列号删除,改为正式Key,保存后再安装就是正式版了基于Eclipse开发的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发
RPG Maker MV(RPG制作大师MV) 1.5.0 免费汉化破解版(附注册机+语言包)
CopyRight &
JB51.Net , All Rights Reserved类型:大小:67.42 MB游戏下载排行榜游戏推荐游戏攻略《RPG制作大师MV》好用吗值得买吗?和以前有什么不同?时间:现在正好RPGMAKER MV在促销中,一定会有许多小伙伴们有这些疑问。下面就让小虫为你带来STEAM上点赞率最高的“Ryusa”的测评(好评)吧:之前在初尝两三个小时就写过测评,貌似不太客观。而且貌似我这篇被点赞的次数最高?有误导新人的可能?那我干脆换一个说法写一下了。RPG Maker 系列是个挂机游戏(误)。优点:1 - Bigger and Better。现在是 48x48 作为一个 Tile 的单位,画面变得更加细腻了。2 - 素材变得更丰富了,而且很多素材是有彩蛋的,SF-Gothic 那张战斗背景图画里面的城堡正好是 VA 的某张 Title 素材3 - 集成了许多旧版本需要靠第三方脚本实现的特性,现在直接变为原生功能。4 - 自带 Sideview Battle System,但需要在数据库的系统页面中手动启用。5 - 自带纸娃娃系统。6 - 支持众多平台的分发、打包。朋友将我做的游戏发布到网页上,进行试玩的时候给我自己的感觉是很震撼的。缺点:1 - 地图与事件编辑器没了参考线的功能2 - 无法自定义编辑器的快捷键3 - 数据库的项目无法批量复制4 - 与旧版本存在鸿沟(历代如此),无法进行工程交换(但有第三方工具支持 VA 转移到 MV,仅支持导出地图[包括里面的事件]以及数据库)5 - BGM 的编曲水平很一般,如果按一首商业作品五千元的定价来衡量,这种编曲大概值一千元左右6 - 新兴工具在发展遇到的资源稀缺的问题7 - 多平台的运行带来的各种兼容性、性能问题单独把脚本(现在被叫做插件)这一块拿出来说。与历代不同的是,MV 弃用了 Ruby 而转向了 Javascript 的怀抱,各有优缺点,先说缺点。1 - 无法直接使用历代脚本(虽然确实可以通过某些插件将 Ruby 解释成 Javascript 糖衣炮弹进行编译)2 - 学习成本增加,很多适应了 Ruby 或者 RGSS 的用户需要学习新的脚本语言再说优点。1 - 将自带的脚本编辑器取消,替换成插件管理器,用户在该页面中可以对插件进行启用或禁用,以及对具体插件的参数进行配置。相当于它进行了一种隔离,这样新手用户无需进入插件文件本身,去改动 .js 文件的代码内容,直接可以通过管理器来配置这些插件,这种“黑盒”的机制能保证插件本身的只读性。2 - 从 VA 时代开始,“注释”(Note)栏除了进行常规备注之外,还可以配合脚本或插件进行参数、代码调用,这样的功能让脚本或插件变得更灵活了起来。但这里将出现一些争议,后面再谈。3 - Javascript 运行效率比 Ruby 高到不知道哪里去了(误)。4 - 现在,数据库以及地图的内容完全以 .json 格式进行存储,意味着用户完全可以用第三方编辑器对这些数据进行管理,因为用自带的编辑器对技能、道具、武器以及防具的条目进行操作效率非常低,可以期待将来出现类似于 Excel 的第三方工具,以表格的形式直接管理这些数据。最后说一些存在争议的地方。1 - 虽然“注释”栏的启用让插件变得更灵活了,但是在没有形成规范之前,很容易造成标签滥用的问题。例如一个插件对道具类型进行扩充,而需要让用户使用之类的标签,那么这个标签就会被它占用了。2 - 如果在 XP、VX、VA 阶段,我们遇到脚本冲突问题的时候,可以直接进到脚本编辑器进行编辑;而在 MV 阶段,我们需要用第三方编辑器对潜在冲突的问题进行解决,这个过程变得繁琐了起来。3 - 插件非常讲究排序,有些插件甚至严格要求文件名大小写,一旦不按照它们的脾气进行放置,就会出现许多奇怪的问题。这样就意味着用户需要对插件的作用本身有一个基础的理解。这个程序没有自带简体中文。笔者觉得这是好事,因为这类工具已经将开发者的门槛降得非常低了,很容易造成市场混乱的问题。这样反而会进行一道很有必要的筛选,将门外汉拒之。毕竟插件的时效性非常高,你是愿意去学专业英语(别的不说,就游戏制作这一方面的术语),还是等待人们翻译出来的过时的结果?再一个,要看懂插件注释,稍微懂一些英语的朋友会觉得非常顺手。似乎有人在质疑本人使用 RM 系列软件的经历,那么好,我在零六年初二的时候就接触到了 RPG Maker XP,一直到现在的 MV,除了对 VX 不怎么熟悉之外,期间也接触过 VA 并且制作过两部作品(制作时间不少于两百小时,虽然这两个项目都已经弃坑)。在这里斗胆给自己的作品打个小广告,这是目前正在创作的 MV 小作品,《》说一些小心得。1 - 是不是发觉新建工程貌似少了很多素材?这是因为模板是按照 Steam 试用版来创建的,购买的 MV 本体中,在程序目录有个叫 DLC 的文件夹,里面有补全的资源,以及不少来自 RPGMakerweb、Kadokawa 的插件。2 - 自带的编辑器对中文显示效果极差,有两个解决方案:一个是将系统区域更改为日本;另一个是替换程序目录的部分文件,因为涉及到程序本身的修改,不推荐这样做,请各位感兴趣的朋友自行搜索 66RPG 相关内容。3 - ()这个网站有着大量的插件资源,推荐懂英语的朋友直接到这里找心意的插件。我先前低估了 MV 的发展前景,现在的势头确实是非常惊人的,在这里向大家道歉。4 - 最后向 Yanfly 这位大神致敬!他做出了大量的优秀插件,涵盖了游戏机制的方方面面。其博客页面在 怎么样?看了他的评测是否拿定主意了呢?行动吧!简单的物品得失日志插件 | RPG制作大师MV中文网
:請問有甚麼辦法可以更變事件點名稱的字體顏色嗎?

我要回帖

更多关于 rpg maker mv 插件 的文章

 

随机推荐