热血传奇Tile地图绘制方法分析及平滑绘制分析
2014-05-13 22:07
232 查看
众所周知热血传奇的地图绘制是不平滑的。因为其绘制间隔是以游戏中的X,Y坐标为单位进行绘制间隔。而一个X坐标.和Y坐标 在游戏内表示 48,32 个像素点。
而游戏中的房屋等元素在我看来更是坑爹。因为房屋这些元素的绘制并不是以左上角为基点进行绘制 而是以左下角。也就意味着 如果一长房屋的图片长度如果和屏幕差不多大。 则在获取房屋图片的索引时 需要循环两个屏幕的高度。而且这经常出现。比如盟重的石墓。 如果不循环两倍的屏幕高度。通常是15*32个
for nY := -2 to ScreenHeigh div UNITY + 16 do
则房屋会出现不完全的问题。
我想改进这种绘制方法实现平滑绘制。
想法是:先建立一个略大于屏幕宽度和高度的渲染目标。至少左右上下大于两个坐标单位。然后循环将Tile图片画在此渲染目标上。再将其需要显示的区域画在默认目标上。
这里需要注意的是传奇的地砖分为大地砖(96*64个像素) 和小地砖(48*32个像素) 分别存放在Tiles 和Smtiles 文件内。而传奇的单位坐标为 48*32个像素。也就是说大地砖其实是 包括了4个坐标单位的图像。如果渲染的目标坐标X,Y并不是2的倍数的话。那么大地砖就会被取消绘制。所以当碰到X Y为非2的倍数时候 画大地砖之前一定要将X,Y便宜减小到最邻近的2的倍数的XY坐标 然后将其坐标绘制出来。
或者将画地图的单位大小作为2的倍数进行。
对于MapObject来说 就是指房屋以及灯光这些效果的绘制。房屋的绘制在 TPlayScene.PlayScene 函数里面。下面主要总结一下要点。
首先对于绘制区域会执行两次循环。为什么是两次 而不是一次?
第一次对于取出来每个坐标的纹理会进行判断 如果其宽高等于 48*32 那么才会进行普通绘制。
第二次对于取出来每个坐标的纹理会进行判断 。如果其坐标需要混合绘制。则不管纹理的大小进行混合绘制。如果纹理不需要混合绘制 那么纹理宽或高必须不等于48或32
决定纹理是否需要混合由如下决定
而游戏中的房屋等元素在我看来更是坑爹。因为房屋这些元素的绘制并不是以左上角为基点进行绘制 而是以左下角。也就意味着 如果一长房屋的图片长度如果和屏幕差不多大。 则在获取房屋图片的索引时 需要循环两个屏幕的高度。而且这经常出现。比如盟重的石墓。 如果不循环两倍的屏幕高度。通常是15*32个
for nY := -2 to ScreenHeigh div UNITY + 16 do
则房屋会出现不完全的问题。
我想改进这种绘制方法实现平滑绘制。
想法是:先建立一个略大于屏幕宽度和高度的渲染目标。至少左右上下大于两个坐标单位。然后循环将Tile图片画在此渲染目标上。再将其需要显示的区域画在默认目标上。
这里需要注意的是传奇的地砖分为大地砖(96*64个像素) 和小地砖(48*32个像素) 分别存放在Tiles 和Smtiles 文件内。而传奇的单位坐标为 48*32个像素。也就是说大地砖其实是 包括了4个坐标单位的图像。如果渲染的目标坐标X,Y并不是2的倍数的话。那么大地砖就会被取消绘制。所以当碰到X Y为非2的倍数时候 画大地砖之前一定要将X,Y便宜减小到最邻近的2的倍数的XY坐标 然后将其坐标绘制出来。
或者将画地图的单位大小作为2的倍数进行。
对于MapObject来说 就是指房屋以及灯光这些效果的绘制。房屋的绘制在 TPlayScene.PlayScene 函数里面。下面主要总结一下要点。
首先对于绘制区域会执行两次循环。为什么是两次 而不是一次?
第一次对于取出来每个坐标的纹理会进行判断 如果其宽高等于 48*32 那么才会进行普通绘制。
第二次对于取出来每个坐标的纹理会进行判断 。如果其坐标需要混合绘制。则不管纹理的大小进行混合绘制。如果纹理不需要混合绘制 那么纹理宽或高必须不等于48或32
决定纹理是否需要混合由如下决定
ani := Map.m_MArr[I, j].btAniFrame; if (ani and $80) > 0 then begin blend := True; //最高位为1则需要混合绘制 ani := ani and $7F; end;
相关文章推荐
- 热血传奇Tile地图绘制方法分析及平滑绘制分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析 .
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析(转载的文章,出处在正文已表明)
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 提取轮廓两种方法及绘制轮廓中最大等级分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Unity2D - 3. 手动绘制简单瓦片地图TileMap
- Android中View绘制流程以及invalidate()等相关方法分析
- ****Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中View绘制流程以及invalidate()等相关方法分析