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

Project1

 找回密码
 注册会员
搜索
查看: 2585|回复: 10
打印 上一主题 下一主题

请问RM有无快速的描绘方法

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
6 小时
注册时间
2006-10-5
帖子
63
跳转到指定楼层
1
发表于 2007-8-28 19:28:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
使用fill_rect,set_pixel等描绘命令时,速度很慢,比画面刷新的速度慢很多
而RM显示图片或动画时RM描绘速度很快,它是如何实现的呢?
此贴于 2007-9-4 21:40:13 被版主柳柳提醒,请楼主看到后对本贴做出回应。
··········· 快乐建立在健康的基础上。 ···········

Lv1.梦旅人

梦石
0
星屑
60
在线时间
6 小时
注册时间
2006-10-5
帖子
63
2
 楼主| 发表于 2007-8-28 19:28:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
使用fill_rect,set_pixel等描绘命令时,速度很慢,比画面刷新的速度慢很多
而RM显示图片或动画时RM描绘速度很快,它是如何实现的呢?
此贴于 2007-9-4 21:40:13 被版主柳柳提醒,请楼主看到后对本贴做出回应。
··········· 快乐建立在健康的基础上。 ···········
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-4-20
帖子
17
3
发表于 2007-8-28 19:37:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
6 小时
注册时间
2006-10-5
帖子
63
4
 楼主| 发表于 2007-8-31 18:01:57 | 只看该作者
就是在给出图片的 大小 位置 RGB 后迅速将图片显示出来,需要怎么设置呢
··········· 快乐建立在健康的基础上。 ···········
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1643
在线时间
1612 小时
注册时间
2007-8-28
帖子
3252

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

5
发表于 2007-8-31 20:46:28 | 只看该作者
请楼主给出你的脚本。理论上用这个命令是一点不慢的,估计是楼主的写法有问题
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
6 小时
注册时间
2006-10-5
帖子
63
6
 楼主| 发表于 2007-9-4 18:45:06 | 只看该作者
$aseesa = Sprite.new
$aseesa.bitmap = Bitmap.new(640,480)
for i in 1..640
  for m in 1..480
    $aseesa.bitmap.set_pixel(i, m, Color.new(255,255,255))
  end
end
这个脚本要运行2秒左右才能画出图片,普通的显示图片只要一瞬间就显示出来了
虽然同为307200个点,但显示的速度差很多,显示图片一定有特别的显示方法,它是如何实现的呢?
··········· 快乐建立在健康的基础上。 ···········
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

7
发表于 2007-9-5 05:34:53 | 只看该作者
让我回答吧,因为最近正好制作新的RPG制作工具,正好解决过这个问题。

当然慢了,因为你这种设置是307200个点×RGB三色浮点运算,在内存中完成,然后将其挪到显存,最后绘制。

而显示图片则是通过成熟的系统函数打开图片,然后将其直接扔到显存做alpha_blend粘贴出来(显卡处理alpha_blend速度极快,都是硬件电路),至少至少节省了100万次运算(何况RM的RGB还是浮点运算),何况RM的图像还是Bitmap,封在Sprite里面,这里面的颜色矩阵,光想也知道汇编出来之后寻找内存位置。

所以原则就是绝对不要去手动操作象素点,这种东西太底层了,必须交给硬件去处理。系统API和DirectX等内部都有硬件接口,它自己处理了,而你的程序则是完全不可能调用硬件。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1643
在线时间
1612 小时
注册时间
2007-8-28
帖子
3252

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

8
发表于 2007-9-5 11:23:26 | 只看该作者
让我来解决一部分问题吧,晕。本来悬赏太低,又不能确定一定能够得到认可,不想管这个问题,但是楼主的问题得到柳柳的pm的举荐,就给你发上来。附带范例。
http://rpg.blue/upload_program/files/jiejuewenti7.rar

范例说明:左面的小人是解决办法1的脚本加载,发现快了不少。右面的小人是预先加载,显示几乎不需要时间。上面的是原问题脚本,2到3秒的加载。


描绘都是“一瞬间"的。之所以楼主觉得慢,不是描绘问题
  1. for i in 1..640
  2. for m in 1..480
复制代码


你看看这个?相当你描绘多少图片?你要是描绘1个点,速度我敢说和比显示1张图片快。
到底描绘1个点和显示1张图片的速度关系是多少,我没有测试过,也不是很清楚。不过你要是用for的命令去放上很多图片,仍然是很卡。不信,楼主请显示地图的一个元件,让他铺满屏幕1024的,仍旧是很卡,不过比点好点。难道是for有错吗?的确。本身ruby的执行效率就有问题,color的建立是罪魁祸首。其实楼主基本上把所有可能减慢速度的因素全加进去了。

解决办法1:
  1. $aseesa = Sprite.new
  2. $aseesa.bitmap = Bitmap.new(640,480)
  3. color=Color.new(255,255,255)
  4. for i in 1..640
  5. for m in 1..480
  6.    $aseesa.bitmap.set_pixel(i, m,color )
  7. end
  8. end
复制代码

把颜色独立出来,发现速度大为上升,帧数才掉10,原来的掉没了。这已经是快速不少。

在开头画面预载图片,不要释放掉,在显示,发现这回更快,和加载一般图片已经没有区别,反而更快。但是开头显然会卡一下,这时候,预载脚本就可以发挥作用了,而不是视觉的摆设,任何脚本都是要有实际用途的,而摆设脚本不是。

另外,怎么进行图片加速的问题有人已经研究过,我的正在研究中,不拿出来献丑。
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

9
发表于 2007-9-5 16:58:20 | 只看该作者
时间可以做个简单测试,楼上。首先加一个高精度计时器:http://rpg.blue/web/htm/news225.htm,便于计算毫秒数。

然后640*480个点的绘制运算:
  1. p "测试开始"

  2. a = $sys_timer.now()
  3. $aseesa = Sprite.new
  4. $aseesa.bitmap = Bitmap.new(640,480)
  5. color=Color.new(255,255,255)
  6. for i in 1..640
  7. for m in 1..480
  8.   $aseesa.bitmap.set_pixel(i, m,color )
  9. end
  10. end
  11. a = $sys_timer.now() - a
  12. p a.to_i,"先创建Color,绘制填满640×480个点"

  13. a = 0
  14. $aseesa.bitmap.dispose
  15. $aseesa.dispose

  16. a = $sys_timer.now()
  17. $aseesa = Sprite.new
  18. $aseesa.bitmap = Bitmap.new(640,480)
  19. for i in 1..640
  20. for m in 1..480
  21.   $aseesa.bitmap.set_pixel(i, m,Color.new(255,255,255))
  22. end
  23. end
  24. a = $sys_timer.now() - a
  25. p a.to_i,"每次创建Color,绘制填满640×480个点"

  26. a = 0
  27. $aseesa.bitmap.dispose
  28. $aseesa.dispose

  29. a = $sys_timer.now()
  30. $aseesa = Sprite.new
  31. $aseesa.bitmap = Bitmap.new("white")
  32. a = $sys_timer.now() - a
  33. p a.to_i,"从图片读取,填满640×480个点"

  34. a = 0
  35. $aseesa.bitmap.dispose
  36. $aseesa.dispose

  37. a = $sys_timer.now()
  38. $aseesa = Sprite.new
  39. $aseesa.bitmap = Bitmap.new(640,480)
  40. $aseesa.bitmap.fill_rect(0,0,640,480,Color.new(255,0,0))
  41. a = $sys_timer.now() - a
  42. p a.to_i,"绘制矩形,填满640×480个点"
复制代码


在我电脑的情况:
第一种情况:290毫秒
第二种情况:910毫秒
第三种情况:15毫秒 (用的"white"是photoshop做的640*480图)
第四种情况:2毫秒

这就是为什么说最好不要用手动操作象素,290毫秒和15毫秒的差距。

当然,毫无疑问,这些图形生成之后就已经是一个内存对象,再次加载的速度理论上是一样的——这就是楼上所说的加载速度问题,预加载等方法。但是楼上和我讨论的不是一个事情,我现在说的只是用不同方式创建图象(生成BITMAP的过程)---->然后显示图象,这个过程的速度。楼主问的也是为什么同样是640×480个颜色点的一次创建,手动操作象素点要比读取图片的创建速度要慢。结论实际上就是“计算比拷贝要慢”这样一句。

至于创建完毕后从内存加载到显卡速度基本都是相同的。

这个东西的引申就是当年曾经考虑使用set_pixel制作图片的特效,形成斜切或者透视的效果,以此完成小幅度的3D效果(SFC的那种)。但实际上set_pixel运算压力太大,这么做之后帧数只能有0.5到1帧左右。虽说现在电脑硬件升级了,能有1-3帧了,但set_pixel手动生成还是不太可取的方法。

Ruby的for循环效率有问题?这点我倒不知道。不知怎么追踪他的效率,和其他语言做对比?我没研究过Ruby运行时候的汇编情况,这里就不多发表意见了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

10
发表于 2007-9-5 17:06:18 | 只看该作者
以下引用柳之一于2007-9-5 3:23:26的发言:

   本帖相关代码如下:
for i in 1..640
for m in 1..480


你看看这个?相当你描绘多少图片?你要是描绘1个点,速度我敢说和比显示1张图片快。
到底描绘1个点和显示1张图片的速度关系是多少,我没有测试过,也不是很清楚。不过你要是用for的命令去放上很多图片,仍然是很卡。不信,楼主请显示地图的一个元件,让他铺满屏幕1024的,仍旧是很卡,不过比点好点。难道是for有错吗?的确。本身ruby的执行效率就有问题,color的建立是罪魁祸首。其实楼主基本上把所有可能减慢速度的因素全加进去了。

像你说的这个,有一些地方缺乏逻辑性。比如描绘一个点和加载一张图片,这两者之间没有任何共同点,实际上比较他们的速度没有任何意义(就像比较进行1次乘法运算和打开一个声音文件播放所需要的时间一样,这两者没有什么直接联系的)。你需要的是加载图片生成10000个颜色点(比如100×100),用这种方法生成10000个颜色点,然后对比速度,至少这样才有意义。

如果你的意思是用set_pixel和一个只有1象素的图片做对比……那结果不好说,我估计两者速度相当吧。

至于悬赏,这种东西不用太看重吧,呵呵
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-22 20:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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