转载请给出本文链接,以便读者检查更新,谢谢

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的引擎分析(一)相关推荐

  1. RPG Maker的引擎分析(一)(二)

    写在最前: 本系列教程原创版权归bsucat所有,本文只为收藏及共享.转载请按如下方式标明原创作者出处,以示尊重!! 作者:bsucat 原文:http://blog.csdn.net/bsucat/ ...

  2. 【RPG Maker MV】RPG游戏《机器人养成记》制作笔记 - 制作背景和引擎选择

    想让更多的人了解人工智能,学会机器学习,但机器学习本身有太高的入门门槛,导致很多人望而却步.因此一直在想办法让机器学习变得简单.有趣一些.做过一些尝试:比如用动画的形式介绍机器学习原理(点击查看),通 ...

  3. 学习RPG Maker MZ开发创建并发布PC和移动端游戏

    Complete RPG Maker MZ: Create and Publish for PC and Mobile 完整的RPG制造商MZ:为个人电脑和移动设备创建和发布 MP4 |视频:h264 ...

  4. 记一次完整的RPG Maker MV游戏逆向系列第四篇

    前言 阅读本篇前请先看之前的几篇分析噢,不然可能会缺失一些前置知识 这篇还是讲 RPG Maker MV 的游戏分析,主要是如何分析一种通过 GameusQuestSystems.js 的加密手段 工 ...

  5. ClickHouse系列教程三:MergeTree引擎分析

    ClickHouse系列教程: ClickHouse系列教程 Clickhouse之MergeTree引擎分析 CRUD Clickhouse支持查询(select)和增加(insert),但是不直接 ...

  6. activeMQ 的kahadb存储引擎分析

    activeMQ 的kahadb存储引擎分析 很久没更新blog了,前几天看到淘宝开源了Meta,估计notify也要开源了.其实消息中间件的一个非常重要的核心部件就是持久化存储,可能Meta的功能定 ...

  7. RPG Maker mv框架代码解析之窗口文字显示

    目录 窗口文字显示 字体的颜色 通常色 系统色 危机色 死亡色 计量器背景色 血量计量器色1 血量计量器色2 魔法计量器色1 魔法计量器色2 魔法消耗色 力量上升色 力量下降色 技能值计量器色1 技能 ...

  8. RPG Maker MV 打包安卓和修改分辨率的方法

    最近要处理RPGMV游戏的安卓打包过程,发现打包完了在手机上运行,两边总有黑边,后来发现是分辨率有问题,需要修改. 具体打包方法见B站视频: https://www.bilibili.com/vide ...

  9. RPG Maker mv框架代码解析之窗口图片显示

    文章目录 1 窗口基类的图片描画接口 1.1 Face描画接口 1.2 Icon描画接口 2 描画自定义图片 1 窗口基类的图片描画接口 RPG Maker mv框架中的窗口基类(Window_Bas ...

最新文章

  1. js-new、object.create、bind的模拟实现【转载备忘】
  2. 20161023 NOIP 模拟赛 T1 解题报告
  3. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
  4. Windows保护模式学习笔记(十四)—— 阶段测试
  5. java 设计模式_快速上手Java设计模式之简介
  6. python 货币合适_算法之Python实现 - 001 : 换钱的最少货币数
  7. 【Java】Java 如何查看对象的内存布局
  8. (算法)最长回文子串
  9. 2021当一名优雅的代码打工人
  10. PHP的学习--可变函数
  11. hdfs的实验总结_HDFS原理及操作
  12. 悲催的一下午:怎么删除360。。。
  13. Qt动画入门QPropertyAnimation
  14. excel合并两列内容_比Excel公式快10倍,史上最牛合并表格工具来了!!
  15. c# opengl tao
  16. html中制作banner,css banner轮播图怎么做?
  17. 上半年要写的博客文章29
  18. WWDC2019:离开手机,苹果靠什么“挽尊”
  19. TestLink在线Excel用例转换xml
  20. android 一直开机画面,解决:Android模拟器一直停留在开机画面

热门文章

  1. ns-allinone-3.X(simulator模拟器)简单配置
  2. 修改火狐浏览器滚动条样式
  3. 科研论文配色参考【不断更新】
  4. 官方精简版Windows10:微软自己都看不过去了
  5. node js+sql 后端分页查询效率越来越低解决方案
  6. 网易严选如何打造数仓规范和评价体系
  7. 有创意的思维导图怎么画
  8. <img>标签上title属性与alt属性的区别
  9. 什么决定了局域网特性
  10. Oracle(11g)数据库教程之十:Oracle操作题 (复习课)