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

Project1

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

[已经解决] 为了FPS,怎么样才能够局部刷新窗口?!

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
跳转到指定楼层
1
发表于 2011-4-20 16:40:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
最近把系统自带的所有窗口都重写了一遍,发现方法大同小异,写完后运行.....
发现FPS狂降!!!所以在这里想请教一个局部刷新窗口的方法,例如:
物品栏中有100个物品,在物品窗口我想让光标移动到哪,那一个物品的名字就变成绿色,
如果要做到这个效果就只能这样:
  1. if 按下左右键
  2. 刷新窗口 #这个刷新是全部刷新100个物品
  3. end
复制代码
如果这样的话会描画很卡的说,有没有办法这样写?
  1. if 按下左右键
  2. 刷新该物品所在区域
  3. end
复制代码
当然这些物品都是在一个窗口中,我本想原理是先清除改光标区域,然后重新描画,但是代码不知道怎么写!
PS:请各位老大指点下~
做一个游戏也用这么长时间........
PS:说我自己呢

Lv1.梦旅人

梦石
0
星屑
100
在线时间
169 小时
注册时间
2007-8-12
帖子
203
2
发表于 2011-4-20 19:35:45 | 只看该作者
本帖最后由 心雪 于 2011-4-20 20:45 编辑

fill_rect 透明色

受姬中,无范例
Color.new(r,g,b,alpha)

alpha为0即为透明色

点评

理论上可以,但是实际上操作不行。PS:我试验过了  发表于 2011-4-21 07:46
我知道可以这样...... 但是就是不知道该怎么描画这个透明色! PS:麻烦做个范例 呗  发表于 2011-4-20 19:52
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
3
 楼主| 发表于 2011-4-21 07:48:41 | 只看该作者
本帖最后由 失去的记忆 于 2011-4-21 07:49 编辑

理论上可以,但是实际上操作不行,我在Window_Item里面定义了一个方法
  1. def set_rect(x,y,w,h)
  2.       rect = Rect.new(0,0,30,30)
  3.       self.contents = Bitmap.new(30,30)
  4.       self.contents.fill_rect(rect, Color.new(255, 255, 255,100))
  5.   end
复制代码
如果不加“self.contents = Bitmap.new(30,30)”这一句,那么就会报错“contents”为空!!!!
如果加了就会把所有的Bitmap覆盖掉,所以不知道该如何解决

点评

记录一个old_index,每次移动光标,只需要描绘两个item;以上;  发表于 2011-4-21 16:02
在Window_Item类里面的refresh开头会把contents给dispose掉,所以需要把此处替换为clean_rect,然后再重新描绘区域内的内容  发表于 2011-4-21 15:40
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42664
在线时间
7616 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

4
发表于 2011-4-21 07:54:01 | 只看该作者
二次描绘不就可以了,重新描绘一个绿色的想通文字覆盖到该道具的位置。

点评

我就是为了避免二次描绘的问题,如果物品有100多个,描绘起来卡死你!!!  发表于 2011-4-21 13:05
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1035
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

5
发表于 2011-4-21 11:57:50 | 只看该作者
生成一塊用作蒙板的bitmap覆蓋在上面,然後在這個蒙板上描繪綠色文字。

点评

不太明白楼上所说,能否做个范例?  发表于 2011-4-21 13:05
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
发表于 2011-4-21 14:55:12 | 只看该作者
物品窗口光标处为红色.rar (188.7 KB, 下载次数: 19)

点评

PS:怎么认可??? 认可贴不见了....  发表于 2011-4-21 16:24
Sorry!看错了 ,我的工程被我改了........谢谢啦 去认可了!  发表于 2011-4-21 16:21
看了下范例,问题是解决了,不过好像每移动一次光标都会重新描绘一遍!!!物品名称会一层层的叠加.....  发表于 2011-4-21 16:16

评分

参与人数 2星屑 +382 梦石 +2 收起 理由
fux2 + 376 + 2 认可答案=v=
失去的记忆 + 6 认可答案

查看全部评分












你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
169 小时
注册时间
2007-8-12
帖子
203
7
发表于 2011-4-21 15:35:10 | 只看该作者
本帖最后由 心雪 于 2011-4-21 15:36 编辑
  1. class Bitmap
  2.   def clean_rect(*args)
  3.     case args[0]
  4.     when Rect
  5.       fill_rect(args[0],Color.new(0,0,0,0))
  6.     when Fixnum
  7.       fill_rect(args[0],args[1],args[2],args[3],Color.new(0,0,0,0))
  8.     end
  9.   end
  10. end
复制代码
很难么- -

使用Bitmap#clean_rect(rect)或clean_rect(x,y,width,height)来清除一个Bitmap的矩形区域,然后重新描绘这个区域即可

评分

参与人数 1星屑 +244 收起 理由
fux2 + 244 辛苦费~

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 10:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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