Tile Based Engine 中的墙壁自动拼接处理
来源:互联网 发布:有关淘宝系统的小说 编辑:程序博客网 时间:2024/04/28 18:55
基于 Tile 的引擎中重复利用率最高的图素,除了地面就是墙壁了, 大家回想一下恺撒III 中的修筑城墙, 或是 Simcity2000 中拉扯电线, 道路,每种物体都只有十几种基本的图素来拼接,而交叉处理都是程序自动选择正确的图素. 假设我们做一个地图编辑器, 这个功能应该也不能少吧:-)
实际上, 这个问题早在文本模式的程序就已经出现过. 那就是表格线的处理. 文本模式下, 不能绘制直线, 我们需要绘制表格时, 就需要利用 ASCII 字符来拼接出需要的图形. 成功的文本编辑器, 都具有绘制制表线的功能. 其中最需要解决的问题就是表格线交叉时, 如何正确的选择合适的 ASCII 码.
如果采用多层条件判断是很愚蠢的方法. 最简洁的程序是将拼接用的图素按一定的次序 (序号的 2 进制形式可以反映周围的连接状态) 排列. 然后通过简单的公式计算出正确的元素. 具体就是说, 将上下左右的连接用 4 位 2 进制数表示出来. 通过读取当前图素的上下左右的图素是否有连接来生成一个数字, 查表得到正确的图素. :-)
下面附有一个小程序, 可以完成上述的功能, 感兴趣的朋友可以读读 :-)
/*
墙壁交叉 Tile 的处理. 类似于文本方式的制表符处理,
我们需要针对制表线的交叉输出正确的 ASCII 码.如果
采用多层条件判断是很愚蠢的方法. 最简洁的程序是将
拼接用的图素按一定的次序 (序号的 2 进制形式可以
反映周围的连接状态) 排列. 然后通过简单的公式计算
出正确的元素.
如下程序演示了这一算法, 其输出结果如下
┏━━┳━━━┳━┓
┃ ┃ ┃ ┃
┃ ┃ ┗━┫
┃ ┃ ┃
┃ ┏┻━┓ ┃
┃ ┃ ┃ ┃
┃ ┗━━╋━━━┫
┃ ┃ ┃
┃ ┃ ┃
┗━━━━┻━━━┛
程序没有注释, 但应当很容易理解. 如有问题, 可以联系
作者 cloudwu@263.net
Homepage: http://member.netease.com/~cloudwu
云风作于 1999 年 9 月 20 日
*/
#include <stdio.h>
#define MAX 12
char wall[32]="·┃━┗┃┃┏┣━┛━┻┓┫┳╋";
char map[MAX][MAX]={
"............",
".oooooooooo.",
".o..o...o.o.",
".o..o...ooo.",
".o..o.....o.",
".o.oooo...o.",
".o.o..o...o.",
".o.oooooooo.",
".o....o...o.",
".o....o...o.",
".oooooooooo.",
"............"
};
int main()
{
int i,j,id;
for (i=1;i<MAX-1;i++) {
for (j=1;j<MAX-1;j++)
if (map[i][j]=='.') printf(" ");
else {
id=(map[i][j-1]=='o')<<3|(map[i+1][j]=='o')<<2|(map[i][j+1]=='o')<<1|(map[i-1][j]=='o');
printf("%c%c",wall[id*2],wall[id*2+1]);
}
printf("/n");
}
return 0;
}
文章来自:http://dev.gameres.com/Program/Abstract/Thinking/TileBaseEngine1.htm
- Tile Based Engine 中的墙壁自动拼接处理
- Tile Based Engine的设计 - 遮挡处理
- Tile Based Engine的设计 - 坐标变换
- Tile Based Engine的设计 - 坐标变换
- Tile Based Engine的设计 - Tile形状的选取
- Tile-Based Deferred Rendering(TBDR)
- Google’s tile engine explained
- 用Unity实现《随机生成 Tile Based 地图之——洞穴》中的算法
- GPU performance tune on tile-based architecture
- PowerVR 图形架构探索:tile-based渲染
- Tile-Based架构下的性能调校
- Performance Tunning for Tile-Based Architecture
- 字符串拼接过程中的内存处理
- (转)Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校
- Performance Tunning for Tile-Based Architecture(Tile-Based架构下的性能调校)
- Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校
- numpy中的tile函数
- numpy中的tile函数
- cdo.message发邮件无需组件
- 杨帆:网络广告必须关注的10大流程
- 动态代理续
- CodeSmith快速向导
- equals和contains
- Tile Based Engine 中的墙壁自动拼接处理
- 角色移动的步长、步速与滑步现象
- Delphi中MIDAS的全面学习
- 斜45度角地图拼接
- ADO程式設計開發指南
- 解决无法显示桌面问题(描述 + 解决方法)
- 正版化:我们需要OEM产品服务
- Using COM+ object pooling with Delphi 6
- ASP.NET页面刷新