RPG Maker的引擎分析(一)
转载请给出本文链接,以便读者检查更新,谢谢
http://blog.csdn.net/bsucat/archive/2010/03/01/5334619.aspx
目录
0. 前言
1. RM的运作原理
1.1 概览
1.2 想象中的结构
2. 图像模块
2.1 10s的秘密
2.2 性能与偏见
2.3 绘制流水线
(待续)
0. 前言
什么人适合阅读这篇文章?
这篇文章涉及到的知识范畴,可能让大家感到陌生。确实,这篇文章不太适合新手阅读,对于大部分人来说这篇文章所讲的内容是没有用的。但是对想要了解RM内部运行原理的朋友来说,这篇文章的内容应该能值得大家一起分享、探讨。
这篇文章里讲到的RGSS版本?
由于RM并不是一个公开源代码的商业软件,各位也对RM的反编译很反感( 我也没那个能力),所以这篇文章的内容,只是我凭个人经验对RM底层引擎的一个猜测性的分析。如果有不对的地方,请大家务必谅解,烦请纠正。
另外,由于我个人对RMXP版本比较熟悉,所以这篇文章主要分析的是RGSS而不是RGSS2 。RGSS2较之RGSS,在底层实现里并无太大的变化,只是更加规范,并增加了部分功能而已。所以这篇文章的大部分内容,对于RGSS2也是适用的。
1. RM的运作原理
1.1概览
可能有不少人诟病RM有这样那样的缺点,但是RPG Maker XP确实是一款设计得非常现代的2D游戏制作工具。从组织结构来讲,RMXP使用的是非常流行的游戏内容和游戏引擎分离的结构,游戏逻辑灵活地独立成一个模块,大概如下图所示。
不要觉得这个很简单哦,实际上要设计好一个引擎上的脚本系统并非易事,还好RM已经帮我们做到了。下面看看RM是怎么实现的。
一般来说,脚本有两种作用方式,一种是宿主语言(比如C)加载脚本处理部分内容,但控制权仍在宿主语言,另一种是则是宿主加载脚本后失去控制权,控制权在脚本语言。RM很明显是属于后者,RM在做了一系列初始化的工作后,调用ruby的C API(比如ruby_run?我对ruby的C API并不熟悉,只是猜测)来让ruby解释器取得了控制权。所以我们能感受到的整个游戏的运行过程,就可以完全由RGSS来控制了。
RGSS在整个RM的软件层次里,已经属于最高级的层次。如下图所示。
在脚本层之下的,便是游戏的引擎。RM通过扩展ruby库,将引擎的功能抽象化,并封装了部分操作。使用者并没有必要关心底层引擎究竟是怎么运行的,比如怎么使用DirectX ,怎么管理内存,怎么处理windows的消息循环等等。只要用户知道怎么使用RGSS,便可顺利地使用引擎做出自己的游戏。
这一部分被封装好的内容,是对用户透明的,通常情况下你无需了解。但是对于求知欲很重的我们来说,今天要探讨的,恰恰就是这部分内容了J。
1.2 想象中的结构
整个游戏的运行,在默认情况下,至少有以下三个文件存在,那就是:Game.exe,Game.ini和rgssxxxx.dll。赶快来猜猜,里面都有些什么吧(不是纯粹的瞎猜哦)。
Game.exe是游戏的主程序,Game.ini是配置文件,这个毫无疑问。Game.exe在一开始运行的时候,就从Game.ini里读取了相关的信息,比如窗口的标题是什么,一会动态加载的dll文件的名字(就是rgssxxxx.dll),以及哪里去找ruby解释器将要运行的脚本(比如默认的Script.rxdata)等等内容。解析ini文件很简单,调用windows提供的ini文件处理API就行了,所以我估计RM也是这么干的(不然呢?!)。
Game.exe本身并没有多少真正和游戏引擎相关的内容,甚至没有windows的消息循环(这个后面会分析),它更像是一个“傀儡”。而操纵它的幕后黑手便是rgssxxxx.dll。在这个dll里,封装了一个用DirectX实现的游戏引擎。Game.exe通过调用它提供的API,最终实现了我们想要的一切(好吧,也许你还想要得更多……)。
在一个游戏程序里,一般来说,大概流程如下:
这个循环,在RGSS的默认脚本里,也有所体现:
# 主循环 loop do # 刷新游戏画面 Graphics.update # 刷新输入信息 Input.update # 刷新画面 update # 如果画面被切换就中断循环 if $scene != self break end end
在这个循环里,update这一句,担负着的便是游戏逻辑处理的任务,Graphics.update从字面上看,明显是游戏画面的处理(实际上有更多内容……),那么窗口消息的处理跑到哪里去了呢?
(未完待续)
RPG Maker的引擎分析(一)相关推荐
- RPG Maker的引擎分析(一)(二)
写在最前: 本系列教程原创版权归bsucat所有,本文只为收藏及共享.转载请按如下方式标明原创作者出处,以示尊重!! 作者:bsucat 原文:http://blog.csdn.net/bsucat/ ...
- 【RPG Maker MV】RPG游戏《机器人养成记》制作笔记 - 制作背景和引擎选择
想让更多的人了解人工智能,学会机器学习,但机器学习本身有太高的入门门槛,导致很多人望而却步.因此一直在想办法让机器学习变得简单.有趣一些.做过一些尝试:比如用动画的形式介绍机器学习原理(点击查看),通 ...
- 学习RPG Maker MZ开发创建并发布PC和移动端游戏
Complete RPG Maker MZ: Create and Publish for PC and Mobile 完整的RPG制造商MZ:为个人电脑和移动设备创建和发布 MP4 |视频:h264 ...
- 记一次完整的RPG Maker MV游戏逆向系列第四篇
前言 阅读本篇前请先看之前的几篇分析噢,不然可能会缺失一些前置知识 这篇还是讲 RPG Maker MV 的游戏分析,主要是如何分析一种通过 GameusQuestSystems.js 的加密手段 工 ...
- ClickHouse系列教程三:MergeTree引擎分析
ClickHouse系列教程: ClickHouse系列教程 Clickhouse之MergeTree引擎分析 CRUD Clickhouse支持查询(select)和增加(insert),但是不直接 ...
- activeMQ 的kahadb存储引擎分析
activeMQ 的kahadb存储引擎分析 很久没更新blog了,前几天看到淘宝开源了Meta,估计notify也要开源了.其实消息中间件的一个非常重要的核心部件就是持久化存储,可能Meta的功能定 ...
- RPG Maker mv框架代码解析之窗口文字显示
目录 窗口文字显示 字体的颜色 通常色 系统色 危机色 死亡色 计量器背景色 血量计量器色1 血量计量器色2 魔法计量器色1 魔法计量器色2 魔法消耗色 力量上升色 力量下降色 技能值计量器色1 技能 ...
- RPG Maker MV 打包安卓和修改分辨率的方法
最近要处理RPGMV游戏的安卓打包过程,发现打包完了在手机上运行,两边总有黑边,后来发现是分辨率有问题,需要修改. 具体打包方法见B站视频: https://www.bilibili.com/vide ...
- RPG Maker mv框架代码解析之窗口图片显示
文章目录 1 窗口基类的图片描画接口 1.1 Face描画接口 1.2 Icon描画接口 2 描画自定义图片 1 窗口基类的图片描画接口 RPG Maker mv框架中的窗口基类(Window_Bas ...
最新文章
- js-new、object.create、bind的模拟实现【转载备忘】
- 20161023 NOIP 模拟赛 T1 解题报告
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
- Windows保护模式学习笔记(十四)—— 阶段测试
- java 设计模式_快速上手Java设计模式之简介
- python 货币合适_算法之Python实现 - 001 : 换钱的最少货币数
- 【Java】Java 如何查看对象的内存布局
- (算法)最长回文子串
- 2021当一名优雅的代码打工人
- PHP的学习--可变函数
- hdfs的实验总结_HDFS原理及操作
- 悲催的一下午:怎么删除360。。。
- Qt动画入门QPropertyAnimation
- excel合并两列内容_比Excel公式快10倍,史上最牛合并表格工具来了!!
- c# opengl tao
- html中制作banner,css banner轮播图怎么做?
- 上半年要写的博客文章29
- WWDC2019:离开手机,苹果靠什么“挽尊”
- TestLink在线Excel用例转换xml
- android 一直开机画面,解决:Android模拟器一直停留在开机画面