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

Project1

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

[RMVX发布] Bitmap用[图片数字]代替[文字数字]_v1.0

[复制链接]

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2011-3-31 20:43:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
0.序
可能以前早就有人有这个想法了,在 >这一帖(计时器)< 已用到类似的技术了。
用法是这样:
     bitmap对象.draw_number(x, y, number, flie_id)
       number    : 数字的字符串/整数类
       flie_id   : "A"-"Z" 的数字图片
就是先做定一些"A"至"Z"的数字图片,左至右为 0123456789。存放在"Graphics/System/Number/"。
然后就在bitmap对象用以上方法,绘画出数字。
默认为"Graphics/System/Number/"路径下的"A.png"的图片。

1.效果观看
使用这个放在"Graphics/System/Number/"路径下:
再做绘画:


2.脚本

  1. #==============================================================================
  2. # ■ 图片数字 v1.0     by 一箭烂
  3. #------------------------------------------------------------------------------
  4. #
  5. #  使用说明:
  6. #
  7. #     bitmap对象.draw_number(x, y, number, flie_id)
  8. #       number    : 数字的字符串/整数类
  9. #       flie_id   : "A"-"Z" 的数字图片
  10. #==============================================================================
  11. class Bitmap
  12.   @@cache = {}
  13.   for i in "A".."Z"
  14.     @@cache[i] = Bitmap.new("Graphics/System/Number/#{i}.png") if FileTest.exist?("Graphics/System/Number/#{i}.png")
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● draw_number
  18.   #--------------------------------------------------------------------------
  19.   def draw_number(x, y, number, flie_id = "A")
  20.     number = number.to_s unless number.is_a?(String)
  21.     bitmap_width = @@cache[flie_id].width / 10
  22.     bitmap_height = @@cache[flie_id].height
  23.     rect = Rect.new(0, 0, bitmap_width, bitmap_height)
  24.     buff = Bitmap.new(width * number.size, bitmap_height)
  25.     number_array = number.split(//)
  26.     index = -1
  27.     for i in number_array
  28.       index += 1
  29.       if i != " "
  30.         rect.x = number_array[index].to_i * bitmap_width
  31.         buff.blt(index * bitmap_width, 0, @@cache[flie_id], rect)
  32.       end
  33.     end
  34.     self.blt(x, y, buff, Rect.new(0, 0, bitmap_width * number.size, height))
  35.     buff.dispose
  36.   end
  37. end
复制代码

3.范例
图片数字_v1.0.zip (269.66 KB, 下载次数: 451)

4.更新历史及下一个版本的期望
目前为初版v1.0
下一个版本希望能够支持:
  • 浮点数
  • draw_text的width、height和align参数以及功能。

点评

实际上跟计时器的那个图片数字的计算方法大有不同。  发表于 2011-4-1 18:03

评分

参与人数 2星屑 +656 收起 理由
一瞬间的幻觉 + 280 稍微改一下,貌似看到了更多的扩展可能.
DeathKing + 376 D计划鼓励。只是不要弄得太复杂了。.

查看全部评分

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

2
发表于 2011-4-1 18:02:38 | 只看该作者
这个脚本比较简单~~正好拿来学习下~~

谢谢剑兰,最近更新很勤啊

点评

这个Bitmap的图片数字是一个不大众化的脚本= =  发表于 2011-4-1 19:55
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
发表于 2011-4-2 17:25:31 | 只看该作者
浮点数 ->to_s一下什么都是浮云
draw_text的width、height和align参数以及功能。 ->width和height……建议你去看看有一种缩放算法可以减小失真率……align->这个不难吧……
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
4
 楼主| 发表于 2011-4-2 17:37:41 | 只看该作者
回复 yangff 的帖子

to_s有两个好处:
1.方便参数使用变量
2.功能合符要求(size和split拆开)

一开始我也想做那四个参数的了,做到关于这四个参数的时候,
发现需要很多的判断:
要看width是否短或长于整个图片长度(长于就不用缩)
要看height是否短或长于整个图片高度(长于就不用缩)
看完上面那两个后就stretch_blt来填进(3个可能的填法)
之后如果上面那width长于的话align失效,
短过的话就要在stretch_blt的坐标作(width-整体数字图片.width)/2,
align为0就无动作,align为1就是坐标+,align为2就是坐标边缘-

真的很烦= = 还有就是缩放算法? stretch_blt好像可以... # <=不好用?
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
发表于 2011-4-2 23:29:40 | 只看该作者
一箭烂YiJL 发表于 2011-4-2 17:37
回复 yangff 的帖子

to_s有两个好处:

失真严重
我记得有一个算法可以这样
图A和图B
A是1x也就是正常大小
B是2x也就是放大一倍
要得到1.5x也就是放大0.5被的图可以通过1x和2x计算出来
特别是对于什么.1223x啊1.445x啊的效果最好了
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
6
 楼主| 发表于 2011-4-7 18:42:28 | 只看该作者
回复 yangff 的帖子

那么就要API或者自制式仿制一些缩放方法?
表示对Bitmap的缩放API没研究,查了一查后发现有几个:
BitBlt
Stretchblt
StretchDIBits
貌似都是根据窗口的场景句柄(<=没研究啥么是场景句柄= =),
但是得到后无法准保窗口内那图的背景是透明。
或者是自己做一个缩放?要get_pixel?
还有2x是长度和高度都2x(就是4x?),还是整体上2x?(对图片缩放真的没研究)
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
发表于 2011-4-7 21:34:22 | 只看该作者
一箭烂YiJL 发表于 2011-4-7 18:42
回复 yangff 的帖子

那么就要API或者自制式仿制一些缩放方法?

zoom_x/y
但是最好自制……用61的那个快速保存Bitmap里面的办法取Bitmap的地址然后用C++的DLL快速变换……相信我RM的效率还有zoom_xy的效果会让你蛋痛的
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
8
发表于 2011-4-7 21:44:47 | 只看该作者
一箭烂YiJL 发表于 2011-4-7 18:42
回复 yangff 的帖子

那么就要API或者自制式仿制一些缩放方法?

这些是 GDI 的函数,需要的是设备上下文(DC)句柄,和 RM 使用的 DirectDraw 处于不同的层面。AlphaBlend 是 GDI 用来处理半透明的函数。

真正的无损缩放需要矢量图,位图无论如何都包含一定的估算性。

点评

转化为RM的Bitmap的方法应该有,但要去掉背景...  发表于 2011-4-8 19:08
矢量图类似RM的窗口图? 中间应该有缩放, 那原理是...(RGE应该知道)  发表于 2011-4-8 18:35
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
369
在线时间
1605 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

9
发表于 2011-4-7 21:49:56 | 只看该作者
苏小脉 发表于 2011-4-7 21:44
这些是 GDI 的函数,需要的是设备上下文(DC)句柄,和 RM 使用的 DirectDraw 处于不同的层面。AlphaBlen ...

http://rpg.blue/forum.php?mod=vi ... B%E5%BF%AB%E9%80%9F

点评

那应该是引用一箭的回帖嘛  发表于 2011-4-7 23:18
这样取addr然后当成指针丢到C++里面处理最快……  发表于 2011-4-7 22:56
先生为啥引用我的回帖 o_o  发表于 2011-4-7 22:36
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4804
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
10
 楼主| 发表于 2011-4-8 19:04:50 | 只看该作者
回复 yangff 的帖子

提到zoom_x/y就联想到Sprite,Sprite的zoom_x/y好用么? (好用也限于Sprite= =)
不过61的保存方法保存在rvdata,用C++读取也难倒我了......

很遗憾的是...我这台死机无法安装VS的任何一款工具(2008、2010都失败...),
听说Office会影响,用官方方法把2007过期版和2010快过期版都卸载掉,
依然无法安装。(我想换机...同时求助...能不用vc++做c++的dll吗?)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 00:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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