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

Project1

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

[已经解决] 窗口属性 fill_rect 的用法详解

 关闭 [复制链接]

Lv1.梦旅人

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

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

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

x
本帖最后由 失去的记忆 于 2011-6-4 08:39 编辑

fill_rect:一个功能强大的描绘窗口属性的方法,可以帮助我门实现血条的绘制等等,
现在我想问一下这个fill_rect的具体用法...
比如
在一个窗口中这样写:
  1. bitmap = Bitmap.new("Graphics/Icons/状态框")
  2.       self.contents.blt(0,0,bitmap ,bitmap.rect)
  3.       self..contents.fill_rect(0,0,20,200,Color.new(0,0,0,255))
复制代码
那么会在图片上面出现一个 20X20的黑框,现在我想让这个黑框消失,我的方法是:
  1. self..contents.fill_rect(0,0,20,200,Color.new(0,0,0,0))/   //描绘一个透明的矩形
  2.       bitmap = Bitmap.new("Graphics/Icons/状态框")   //重新描绘图片
  3.       self.contents.blt(0,0,bitmap ,bitmap.rect)
复制代码
这个方法可真够.......现在我想知道有没有方法不重新描绘图片,就可以让这个矩形消失呢?

点评

注释符号是'#'吧……  发表于 2011-5-27 19:56
做一个游戏也用这么长时间........
PS:说我自己呢

Lv3.寻梦者

酱油的

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

贵宾

2
发表于 2011-5-27 11:13:58 | 只看该作者
蒙板,或者fill個透明色(不過貌似fill兩次z值會有偏移,從而出現痕跡,沒有RM不好測試)
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
200
在线时间
127 小时
注册时间
2005-10-23
帖子
78
3
发表于 2011-5-27 11:57:55 | 只看该作者
本帖最后由 kinguanghua 于 2011-5-27 12:49 编辑

楼主最好载个图 因为不清楚楼主说的黑框是什么
补充:
好吧 我解释一下我问这个问题的意图
因为楼主的是直接用Graphics/Icons/状态框当背景
所以我不太清楚 如果单纯是为了更新的时候去掉原来描绘过的血槽 我一般是这么写的
用fill_rect描绘一个血槽总大小的无色框 然后重新描绘血槽
另一种方法就是把bitmap的一部分描绘到原有血槽部分然后重新描绘血槽
  1. #假设血槽的最大宽度和高度是w和h坐标为x,y
  2. bitmap = Bitmap.new("Graphics/Icons/状态框")
  3. self.contents.blt(0,0,bitmap,Rect.new(x,y,w,h))
  4. #以下描绘血槽
复制代码
还有就是sprite的方法了
这个就不需要重新描绘背景什么的 直接血槽描绘在一个新的sprite里 更新也是更新这个新的sprite

再补充一下 这是我最近写血条的风格 不知道对楼主是否有帮助
  1.   #--------------------------------------------------------------------------
  2.   # ● 描绘HP
  3.   # x,y 血条坐标
  4.   # limit_w,limit_h 血条最大宽和高
  5.   # refreshed 判断是否是从refresh中调用 所以在refresh里调用这个函数的时候应该传true
  6.   #--------------------------------------------------------------------------
  7.   def draw_hsp(x,y,limit_w,limit_h,actor,refreshed=false)
  8.     rect = Rect.new(x,y,limit_w,limit_h)
  9.     # 清楚原有名字
  10.     unless refreshed
  11.       back_bitmap = RPG::Cache.pic("状态栏背景")
  12.       self.contents.blt(x,y,back_bitmap,rect)
  13.     end
  14.     # 描绘血槽背景 当然 也可以是用血槽背景图片代替
  15.     #self.contents.fill_rect(x,y,limit_w,limit_h,black_color)
  16.     # 描绘槽
  17.     w = actor.hp.to_f*limit_w/actor.maxhp.to_f
  18.     w = [[w,0].max,limit_w].min   
  19.     # 这里w为现在要描述的血槽的宽
  20.     self.contents.fill_rect(x,y,w,h,Color.new(255,0,0))
  21.     # 描绘数值
  22.     rect = Rect.new(x+54,y-11,32,16)   
  23.     self.contents.draw_text(rect, actor.hp.to_s,2)
  24.   end
复制代码
PS:建议楼主多试试用图片表示血槽什么的 会比默认的华丽很多

点评

敢问您知道楼主在说什么吗?不会的话请不要回复,为了积分请去水区,本区不支持灌水以及伪灌水。  发表于 2011-5-27 12:09
世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。
[b]本人姓名:异界的月[/b]
[b]空之轨迹菜单系列[/b]
2.01版增加任务菜单 地址[url=http://rpg.blue/viewthread.php?tid=135748&extra=page%3D1]http://rpg.blue/viewthread.php?tid=135748&extra=page%3D1[/url]
1.00版地址[url=http://rpg.blue/viewthread.php?tid=129463&extra=page%3D1]http://rpg.blue/viewthread.php?tid=129463&extra=page%3D1[/url]
[b]转投希艾拉工作室当脚本师,龟速制作中[/b]
[b]转职为三次元苦逼渣渣程序员[/b]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
4
发表于 2011-5-27 12:08:02 | 只看该作者
在该窗口范围内多新建一个Bitmap用来描绘血条 嗯

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

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

开拓者贵宾

5
发表于 2011-5-27 12:25:39 | 只看该作者
Sprite,一了百了。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
6
 楼主| 发表于 2011-5-27 12:29:15 | 只看该作者
Wind2010 发表于 2011-5-27 12:08
在该窗口范围内多新建一个Bitmap用来描绘血条 嗯

哈哈,我是这样想过啦,但是血条上面还要写下HP数字的...
如果是这样的话,那么数字就没了...
PS:我测试过的....

点评

哈哈,我是这样想过啦,但是血条上面还要写下HP数字的... 如果是这样的话,那么数字就没了... PS:我测试过的....  发表于 2011-5-27 14:24
血條刷新的時候把數字一起刷新呀O O反正又浪費不了多少效率  发表于 2011-5-27 13:15
@window.opacity = 0  发表于 2011-5-27 12:53
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
7
 楼主| 发表于 2011-5-27 14:23:29 | 只看该作者
失去的记忆 发表于 2011-5-27 12:29
哈哈,我是这样想过啦,但是血条上面还要写下HP数字的...
如果是这样的话,那么数字就没了...
PS:我测试 ...

.........
这个虽然如此做应该可以,但是我想问一下:
在一个窗口中建立一个Bitmap,能够是这个Bitmap的Z坐标小于本窗口吗?
PS:Sprite除外!!!!

点评

bitmap不存在z值。  发表于 2011-5-27 19:55
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

8
发表于 2011-5-27 19:57:08 | 只看该作者
  1. self.contents.fill_rect(bitmap.rect, Color.new(0, 0, 0, 0))
复制代码
楼主格式注意一下?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
9
 楼主| 发表于 2011-5-28 12:58:32 | 只看该作者
谢谢大家的回复..其实用Sprite我也知道.
但是就是想知道有没有将你描绘的一个透明矩形取消掉!!
PS:重新描绘覆盖它的不算!
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
10
 楼主| 发表于 2011-5-28 12:59:46 | 只看该作者
kinguanghua 发表于 2011-5-27 11:57
楼主最好载个图 因为不清楚楼主说的黑框是什么
补充:
好吧 我解释一下我问这个问题的意图

第一种方法: 能不能不重新描绘图片?这样很耗内存的...
第二种方法:这个方法我也知道,但是可能造成FPS下降...
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 03:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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