热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

浅析RMXP自动元件绘制原理

本系列文章由sky编写,转载请注明出处。http:blog.csdn.netqq573011406articledetails8145569作者:袁全伟

本系列文章由sky编写,转载请注明出处。 http://blog.csdn.net/qq573011406/article/details/8145569

作者:袁全伟  邮箱: qq573011406@126.com   欢迎邮件交流编程心得

 

引子:


1就是RMXP中的自动元件的Title,可以看到我用小格子把图一分成了48份。并且给每个格子分配一个数字编号(从047)。我们以后把这些小格子称为小元件。每个小元件的大小为16*16。在RMXP中绘制自动元件时,是以一个32*32的单元格为单位的,我们这里称这种单元格为大元件,4个小元件可以组成一个大元件。

 

为了方便以后的研究,我们给每一个小元件按照它的功能起一个名字。我把这些小元件分成了4大类。分别是外角内角中心

边:

由图一可以看出共有四条边,我们按照其所在的位置称之为上边,下边左边右边

每条边由两个角边和一个中边组成,角边就是靠近角的那个部分的边。被用红色圈起来的那个就是一个角边

中边,顾名思意,它是一条边的中间部分。略有不同的它由两个小元件组成,编号为14,15的小元件就可以组成一条中边。

外角:

图中用红色圈出来就是外角。可以看出共有四个外角,按照它所在的位置,我们分别成之为:左上外角右上外角左下外角右下外角

 

内角:

图中用红色圈出来的就是内角。同样,按照所在位置,它们分别是左上内角右上内角左下内角右下内角

 

中心:

图中用红色圈起来的就是中心,它由四个小元件组成

 

 

 

原理推导:

RMXP在渲染自动元件单元格时,会根据该单元格的周围8个方向单元格的状态来决定,此单元格应该如何绘制.

为了研究方便,我们给单元格周围8个方向的单元格分别起一个名字.

我们把上,,,.四个方向的边,称为单元格的边分别是上边,下边,左边,右边.

把单元格左上,右上,左下,右下,成为单元格角.分别为左上角,右上角,左下角,右下角.

我们把要绘制的单元格分成四个块(前面已经提过,一个大元件由四个小元件组成,PS:以后把要绘制的单元格成为目标格)

分别为     LT :左上

          LB:左下

                 RT:右上

                 RB:右下

边的绘制 :

:中边

我们先来看一下在什么情况下,目标格会绘制

首先我们去掉了目标格的上边:

发现RMXP在目标格的LTRT位置绘制了一条上中边

我们再分别试试其他的边.得到一下的结果

因此可以总结出:

规律1: 

   如果缺少某方向的边,则在大元件的相同方向的位置绘制某方向的中边..

   设缺边方向为X,如果X为垂直方向(/)B为左,D为右,否则B为上,D为下.

在大元件的XB位置绘制X中边,由于X中边占用两格所以XD位置也被占用了.

:角边

那么在什么情况,会绘制角边呢.这次我们去掉目标格的两条边试试.

我们分别去掉,上下边..  和左右边下图是结果.

可以看出目标格上并没有被绘制出角边..

我们去掉其他两边试试.

这次我们去掉了,左边,下边下边,右边左边,上边和上边,右边.. 

根据上图我们发现,只有去掉的两边为临边的情况下,才会在目标格子上绘制角边.

规律2:

   如果所缺的两个边相邻,假设缺边的方向为X,Y

假设X的向对方向为A,Y的相对方向为B,如缺少X边和Y,则将X边的Y角边绘制在大元件的XB位置

Y边的X角边绘制在大元件的AY位置

 

例如:X为左,Y为下,A为右,B为上,如缺少左边和下边,则将左边的下角边绘制在大元件的左上位置

将下边的左角边绘制在大元件的右下位置

     

 

角的绘制 :

:外角

绘制外角所需要的条件其实与在绘制角边的时候情况相同,但是以后在写程序时,要保证相应的绘制顺序,否则会出现覆盖的情况,从而得不到正确的情况.

依然拿这张图来讲,看以看到,如果目标格构成某个角的两边同时缺少的话,就会在目标格相应位置上绘制相应的外角.

例如左上角,如果同时缺少左边,和上边.则会在目标格的LT位置绘制左上角.

规律3:检测某个方向角的两边是否同时缺少,.则在该方向绘制相应的外角

   即如果XY角同时缺少X边和Y,则在大元件的XY位置绘制XY.

例如X为左,Y为上.

  则如果同时缺少左边和上边,则在大元件的左上位置绘制左上角

:内角

 

通过上图我们看出,当目标格缺少某个角时,就会在目标格的相应位置绘制相应的内角.

但是当我们去掉构成所缺角的其中一边.上边的就不成立了.

因此,

规律4:如果缺少某方向的角,且不缺少构成该角的任何一边,

则在大元件相应方向位置上绘制相应的内角

例如:如果缺的是左上角且不缺少左边和上边则在大元件的左上位置绘制左上内角

 

在程序中绘制自动元件 :

在程序中绘制自动元件时的流程应该是:

  1. 绘制边
  2. 绘制外角
  3. 绘制内角

下面提供一个绘制的例子:

最终结果:

LT:左上角

LB:左下角

RT:上边的左角边

RB:下边的左角边

  左上角(缺少)| (缺少) |右上角(缺少)

    (缺少)|        |右边(不缺)

  左下角(缺少)| (缺少) |右下角(不缺)

绘制流程:

1.画边:

(1)检测到缺少上边,并检测到同时缺少左边

LT:

LB:

RT:上边的左角边

RB:左边的上角边

 

(2)检测到缺少下边,且同时缺少左边

LT:左边的下角边

LB:

RT:上边的左角边

RB:下边的左角边

(3)检测到缺少左边

重复(1)(2)

LT:左边的下角边

LB:

RT:上边的左角边

RB:下边的左角边

2.画外角

(1)检测到同时缺少左上角左边和上边

LT:左上角

LB:

RT:上边的左角边

RB:下边的左角边

(2)检测到左下角同时缺少左边和下边

LT:左上角

LB:左下角

RT:上边的左角边

RB:下边的左角边

3.画内角

(1)没有检测到符合条件的元件

 

 

小结 :

如果理解了上面的那些规律,会很容易就写出相应的代码来.我这里已经用C写好了一个.这是运行结果图


 

 

我把写好的代码打包放在了CSDN下载里,里面还包含了一个简单的demo.

Demo用的是Allgero游戏引擎,如果你想知道如何使用该引擎的话,请看我前面的教程.

另外压缩包还有我推导绘制原理时的笔记等。

下载地址:http://download.csdn.net/detail/qq573011406/4730729




推荐阅读
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了shp与json互转(转载)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了在PHP中将空格转换为问号的问题,并提供了解决方案。文章指出,空格不是标准的空格,而是特殊的0xC2 0xA0字符。作者尝试使用mb_convert_encoding函数将utf8字符串转换为gbk编码,但未成功。文章建议检查编辑器是否对空格进行了特殊处理,并提供了使用base64_encode函数打印结果的方法。最后,给出了完整的代码示例。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 本文介绍了常用的编辑器快捷键,包括快速转换编辑器、浏览选项卡、提取本地变量和方法、编辑器窗口最大化等功能。通过使用这些快捷键,可以提高编辑器的使用效率,减少复杂度,并提升代码的可测试性。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • 编码_QML 编码约定
    本文由编程笔记#小编为大家整理,主要介绍了QML编码约定相关的知识,希望对你有一定的参考价值。 ... [详细]
  • VG浏览器是免费的吗 VG浏览器常见问题汇总
    VG浏览器是免费的吗VG浏览器常见问题汇总。现在,不少人都在使用VG浏览器。但是,有些用户在使用VG浏览器过程中,也是碰到不少问题。今天,小编给大家带来VG浏览器常见问题大汇总。想 ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • pc电脑如何投屏到电视?DLNA主要步骤通过DLNA连接,使用WindowsMediaPlayer的流媒体播放举例:电脑和电视机都是连接的 ... [详细]
  • 最近学习了关于使用最为流行的jquery发送请求,在实践中以最为简单的聊天室作为测验的辅助工具,对相关网页开发有一个初步的认识,希望大家能够一起学习进步。首先介绍一下 ... [详细]
author-avatar
西岑村内徐老爷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有