热门标签 | 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




推荐阅读
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 精选多款高效实用软件及工具推荐
    本文介绍并推荐多款高效实用的软件和工具,涵盖系统优化、网络加速、多媒体处理等多个领域,并提供安全可靠的下载途径。 ... [详细]
  • 探索如何使用公共数据集为您的编程项目提供动力。无论您是编程新手还是有经验的开发者,本文将为您提供实用建议和资源,帮助您启动并运行一个创新的数据驱动型项目。 ... [详细]
  • 本文介绍了ArcXML配置文件的分类及其在不同服务中的应用,详细解释了地图配置文件的结构和功能,包括其在Image Service、Feature Service以及ArcMap Server中的使用方法。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 基于结构相似性的HOPC算法:多模态遥感影像配准方法及Matlab实现
    本文介绍了一种基于结构相似性的多模态遥感影像配准方法——HOPC算法,该算法通过相位一致性模型构建几何结构特征描述符,能够有效应对多模态影像间的非线性辐射差异。文章详细阐述了HOPC算法的原理、实验结果及其在多种遥感影像中的应用,并提供了相应的Matlab代码。 ... [详细]
  • 本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 由中科院自动化所、中科院大学及南昌大学联合研究提出了一种新颖的双路径生成对抗网络(TP-GAN),该技术能通过单一侧面照片生成逼真的正面人脸图像,显著提升了不同姿态下的人脸识别效果。 ... [详细]
  • 本文介绍如何在 Visual Studio Code 中使用 Jupyter Notebook 插件,包括创建、编辑和运行笔记本的基本操作。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 2017年苹果全球开发者大会即将开幕,预计iOS将迎来重大更新,同时Siri智能音箱有望首次亮相,AI技术成为大会焦点。 ... [详细]
  • C语言实现推箱子游戏的完整代码
    本文详细介绍了如何使用C语言在Linux环境下实现一个简单的推箱子游戏,包括游戏的基本规则、地图设计及代码实现。适合C语言初学者学习。 ... [详细]
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社区 版权所有