设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 流川枫
打印 上一主题 下一主题

[已经过期] RMXP系统里画图块的方式是每帧循环画,还是一次画好?

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
11
 楼主| 发表于 2009-10-13 16:47:22 | 只看该作者
那是什么意思~~~~~ 我甚至不知道21*16是什么~~~~长宽的块数?
goahead 发表于 2009-10-13 09:44

這是舉個例子,因為屏幕裏同時最多可以出現21*16個圖塊大小。
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

12
发表于 2009-10-13 17:08:13 | 只看该作者
本帖最后由 link006007 于 2009-10-13 17:14 编辑

其实这个应该去问问RGE的作者会比较好
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
13
 楼主| 发表于 2009-10-13 19:40:18 | 只看该作者
其实这个应该去问问RGE的作者会比较好
link006007 发表于 2009-10-13 17:08

RGE是什麼?
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
14
发表于 2009-10-13 22:30:50 | 只看该作者
屏幕上需要显示的只有 640 * 480 像素,也就是 1200 KB,而你在上面算的包含了不需要显示的信息,这些信息在内存中由 Tilemap 维护,显示的时候再通过算法描绘出位图,所以实际体积没有多大。内存中并没有保存着一张超大的位图。Tilemap 的显示是怎么处理的不清楚,不过归根结底还是不会脱离多缓存机制,即在缓存先循环描绘完 640 * 480 大小的所有图块,然后一次拷贝到屏幕上下文中。如果直接在屏幕上描绘,在固色填充(清除画布)的时候人眼就会看到闪烁。所以 RM 即通过循环描绘了图块,又把在缓存中描绘好的图块一次性的拷贝到屏幕上,因而你问题的答案是:Both.
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
15
 楼主| 发表于 2009-10-14 16:43:20 | 只看该作者
屏幕上需要显示的只有 640 * 480 像素,也就是 1200 KB,而你在上面算的包含了不需要显示的信息,这些信息在内存中由 Tilemap 维护,显示的时候再通过算法描绘出位图,所以实际体积没有多大。内存中并没有保存着一张 ...
紫苏 发表于 2009-10-13 22:30

いいえ、絶対に!
你誤解了我的問題,我的問題是RM是一切換地圖就一次性將地圖所有圖元(除了動態圖元)都畫在一張大紋理上,以後只需要從這張紋理上截取640*480的區域顯示,還是每次都循環21*16次將每個圖元畫到屏幕上(也可以畫到640*480的紋理上,如果不移動地圖,下次就不用循環,直接把這張紋理再貼上去)。(21*16次將重複3次,因為有3個圖層)
但是事實上,第一個方案的可行性為0,而第二個的話太浪費CPU時間片,所以RM可能用第二個方案,也可能用其他的優化方案。(其他的優化方案我想到了一個,每次移動只需要畫一行,而不是全部。)
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
16
发表于 2009-10-15 00:21:01 | 只看该作者
不要在 2D 遊戲製作討論中引用 3D 遊戲製作的概念,紋理是 3D 遊戲中用 2D 位圖來渲染 3D 物體表面的貼圖技術,而 RM 中只不過是單純的位圖描繪而已~

RM是一切換地圖就一次性將地圖所有圖元(除了動態圖元)都畫在一張大紋理上,以後只需要從這張紋理上截取640*480的區域顯示
我假設你所提到的紋理是位圖的意思,我之前也說了內存中肯定不會隨時留著一張超大位圖,但內存中有 Tilemap 對象。Tilemap 對象有 map_data 成員(和 RPG::Map#data 一致),它是一個三維數組,實際保存了地圖圖塊的信息,其形式是:
data[圖塊 X 座標,  圖塊 Y 座標,  圖層編號],其元素的類型是整型。
所以這個結構最大也只有 500 * 500 * 3 * 4 字節,也就是 3000000 B,2929.6875 KB,2.86 左右 MB,遠遠小於 500 * 500 * 32 * 32 的一張位圖。map_data 中每個元素是一個 tile_id,通過這個圖塊 id 就可以知道當前層中應該描繪圖塊集中的哪個圖塊。這時就需要 Tilemap 的 tileset 成員來引用圖塊集的位圖對象,然後就可以獲取到實際的位圖,所以緩存中,也就是 RPG::Cache, 也隨時保存著一個 Tileset 的位圖對象。Tileset 中的單個圖塊是邏輯上唯一的,不會像保存一整張實際地圖的位圖那樣有很多重複的子位圖(即重複使用圖塊),而且一張 Tileset 也有尺寸限制。
可以把 Tilemap 地圖數據看成一個圖塊索引集合,它並沒有保存位圖,而是保存了圖塊的索引,實際渲染到屏幕上時只是通過圖塊索引去獲取 Tileset 中的圖塊位圖,并描繪而已~
還是每次都循環21*16次將每個圖元畫到屏幕上

還是之前說的,一般需要擦除背景的遊戲都是雙緩存,甚至更多緩存機制,圖塊肯定是循環描繪的,因為你需要一個循環來遍歷地圖上的所有圖塊。但你的循環描繪並不是直接把位圖描繪到屏幕上,而是描繪到一個兼容屏幕設備上下文的緩存設備上下文中,兩者描繪的速度不是一個級別的——前者需要在描繪后立即反映到屏幕上,而後者只是改變了內存中位圖。當一幀之間所有的需要顯示的東西都描繪到這個緩存當中后,這個緩存所維護的位圖就是一張可以呈現給玩家的遊戲畫面了,這樣直接把緩存通過內存拷貝的方式拷貝到屏幕上,即提高了效率,又避免了閃爍。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

17
发表于 2009-10-15 01:07:51 | 只看该作者
本帖最后由 link006007 于 2009-10-15 01:09 编辑

RGE就在这个版块里面。。。。。。。。。。。。
其实这种tile平铺地图的开源游戏多的是。  
比如mana world, 你如果有兴趣把他封装成一个ruby的内嵌类,
差不多就是一个带网络C/S功能的RM(当然当当了解那些SDL的函数就会吐血)

至于tile的描绘,算法本身就不唯一:可以
把该地图的图块元件载入缓存,不管你地图多大,他的内存大小始终都是图块元件的总和
只有在你需要改变某个元件的内容时,这时候看你的引擎如何处理了,大多数是为此元件专门创建一个副本
然后维护至少一个tile数组,每个元素都保存对应图块的缓存地址,显示优先级,通行情况等等信息
然后通过地图的偏移(RM里好像是ox,oy)索引到当前描绘tile数组的起始位置,以固定的行长度从数组里获取n列的tile信息。图像都是实时的贴到屏幕的(单纯的拷贝是很快的)
其实如果一个图块没有实时刷新,可以想象结果:上一帧如果有精灵在上面描绘过,那么下一帧如果不刷新(重新贴图块),那么那个精灵的图像就会留在上面.
至于RM本身如何处理,这个只有开发人员自己知道。
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
18
 楼主| 发表于 2009-10-15 19:47:57 | 只看该作者
本帖最后由 流川枫 于 2009-10-15 19:52 编辑
不要在 2D 遊戲製作討論中引用 3D 遊戲製作的概念,紋理是 3D 遊戲中用 2D 位圖來渲染 3D 物體表面的貼圖技術,而 RM 中只不過是單純的位圖描繪而已~

我假設你所提到的紋理是位圖的意思,我之前也說了內存中肯定不 ...
紫苏 发表于 2009-10-15 00:21

話說您怎麼也用繁體了?
您如果寫過RPG遊戲系統的話,應該就能理解我的意思。
不過很不幸,您完全沒有理解我和我所提的問。
儘管這是一個我已經宣佈解決的問題……

前面的我已經說的很清楚了,問題的答案。
我只想說明一下,RM理論上是用D3D寫的,不是DDRAW!
所以RM裏存儲圖像數據完全可能是用TEXTRUE(紋理),而不是DDRAW裏的SURFACE(頁面)。
為什麼要用D3D來做2D呢?原因很簡單,為了獲得更多的硬件加速!
就是這樣,其實紋理和頁面的區別不大,都是存儲圖像數據的媒介而已。
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
19
 楼主| 发表于 2009-10-15 20:02:31 | 只看该作者
RGE就在这个版块里面。。。。。。。。。。。。
其实这种tile平铺地图的开源游戏多的是。  
比如mana world, 你如果有兴趣把他封装成一个ruby的内嵌类,
差不多就是一个带网络C/S功能的RM(当然当当了解那些SDL的函 ...
link006007 发表于 2009-10-15 01:07

SDL雖然沒用過,但是查看了相關的文檔,感覺可以用到的硬件加速很少。
SDL和DDRAW都很簡單,不過我覺得最簡單的是D3D,只不過元素多一點。
RGE是什麼?我猜 RPG GAME ENGINE?
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
480
在线时间
177 小时
注册时间
2006-10-3
帖子
618
20
 楼主| 发表于 2009-10-15 20:08:20 | 只看该作者
哦,是RUBY GAME ENGINE啊。
好無奈啊
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-30 04:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表