赞 | 0 |
VIP | 3 |
好人卡 | 0 |
积分 | 1 |
经验 | 14326 |
最后登录 | 2021-12-28 |
在线时间 | 65 小时 |
Lv1.梦旅人 清纯红
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 65 小时
- 注册时间
- 2009-7-23
- 帖子
- 995
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
赤点的游戏库教程(2)
上期讲的是RGSS的内部函数。这次进入重点的RGSS内部的类~
游戏库(2)讲的是Bitmap 和 Rect(会交叉在一起讲)
(3)Sprite和Viewport和Color,Font(可能变动)
那么开始~~~
游戏库(2)Bitmap
大家都知道显示图片Sprite都要用到Bitmap。
Bitmap是位图的类。所谓位图即图像其本身。
包含了图像的具体数据。
为了在画面中显示位图(即图片文件)必需要使用精灵(Sprite)等。
使用方法:
(1)Bitmap.new(filename)
读取 filename 指定的图像文件,生成 Bitmap 对象。
即该对象存储了图片文件里的信息。
显示图片必须使用Bitmap生成的对象。
文件名可省略,会自动识别
如果要显示图片就要用到该类方法
(2)Bitmap.new(width, height)
生成指定尺寸的 Bitmap 对象。
即生成一个width长height宽的矩形。
可用来描绘文字等。
Windows窗口类就使用bitmap来描绘文字
你会看到有这么一行Bitmap.new(width-32, height-32)
即生成比窗口的width和height各小32的矩形,所以描绘文字时不会描绘到边框,而在窗口里面
------------------------------------------------------------------------------
方法:
dispose
释放位图。如果已经释放的话则什么也不做。
一个位图所占用的内存很大,如果不在显示图片应该将其释放
节约内存空间
二次释放,不会造成错误
例:
bitmap = Bitmap.new(filename)
#当不再使用时
bitmap.dispose
disposed?
位图已经释放的话则返回真。
例:
if disposed? == true
bitmap.dispose
else
#什么也不做
end
以上可用在退出某个场景时释放内存用
width
取得位图的宽。
height
取得位图的高。
可以用来查询图片的尺寸(即分辨率)
例:
bitmap = Bitmap.new(filename)
p bitmap.weight #filename图片文件的宽
p bitmap.height #filename图片文件的高
可用来检查两图片是否碰触(具体方法自己想 = =a )
rect
取得位图的矩形(Rect)。
这里直接讲讲Rect
比如天气里的雨就用到Rect。
再用Color来填充该Rect
生成雨的天气效果
------------------------------
Rect.new(x, y, width, height)
即生成看不到的矩形 Rect 对象。
方法set(x, y, width, height)
设定所有属性。
属性x
矩形左上角的 X 座标。
y
矩形左上角的 Y 座标。
width
矩形的宽度。
height
矩形的高度。
------------------------------
blt(x, y, src_bitmap, src_rect[, opacity])
传送 src_bitmap 的矩形 src_rect(Rect)到该位图的座标(x,y)。
例1:(显示部分图片)
begin
bitmap = Bitmap.new(640,480)
bitmap2 = Bitmap.new("Graphics/Battlers/075-Devil01")
bitmap.blt(320, 240, bitmap2,bitmap2.rect,255)
p = Sprite.new
p.bitmap = bitmap
p.x = 0
p.y = 0
x = bitmap2.rect.x
y = bitmap2.rect.y
width = bitmap2.rect.width
height = bitmap2.rect.height
loop do
Graphics.update
bitmap.blt(100, 240, bitmap2,Rect.new(x,y,width,height / 2),255)
bitmap.blt(200, 240, bitmap2,Rect.new(x,y,width / 2,height),255)
p.bitmap = bitmap
end
end
把上面脚本插入Main前即可看到效果
用到很多Bitmap和Rect的方法
opacity 指定其不透明度,范围为 0 ~ 255。这个不用我多说了吧,提醒一下255是普通,0就看不见了。
stretch_blt(dest_rect, src_bitmap, src_rect[, opacity])
传送 src_bitmap 的矩形 src_rect(Rect)到该位图的矩形 dest_rect(Rect)。
这个与blt(x, y, src_bitmap, src_rect[, opacity]) 只是多了改位图的矩形 dest_rect(Rect)。
自己试试吧,如例1.
fill_rect(x, y, width, height, color)
fill_rect(rect, color)
以 color(Color)颜色填充该位图的矩形(x,y,width,height)或 rect(Rect)。
例2:(粉红色矩形)
begin
bitmap = Bitmap.new(100,200)
bitmap.fill_rect(bitmap.rect, Color.new(250,125,200))
p = Sprite.new
p.bitmap = bitmap
p.x = 100
p.y = 200
loop do
Graphics.update
end
end
例3用的是fill_rect(rect, color)
会发现有一个粉红色的矩形在屏幕上。
你也可以试试fill_rect(x, y, width, height, color)。
clear
清除位图全体。
清除的是信息
对象还在
彻底释放要用disposed
例3:(逐层显示图片)
begin
bitmap = Bitmap.new(640,480)
bitmap2 = Bitmap.new("Graphics/Battlers/075-Devil01")
p = Sprite.new
p.bitmap = bitmap
p.x = 0
p.y = 0
x = bitmap2.rect.x
y = bitmap2.rect.y
width = bitmap2.rect.width
height = bitmap2.rect.height
temp = 0
loop do
Graphics.update
bitmap.clear#清除位图信息
if temp != height
bitmap.blt(100, 240, bitmap2,Rect.new(x,y,width, temp += 1),255)
else
bitmap.blt(100, 240, bitmap2,Rect.new(x,y,width, height),255)
end
p.bitmap = bitmap
end
end
如果把bitmap.clear去掉你会发现没变化。
并不会逐层显示,所以应该使用clear
每次传送的矩形的height即temp越来愈大。
最后显示整张图片。
get_pixel(x, y)
取得点(x,y)的颜色(Color)。
取得点颜色,做个循环
可以用来把bitmap对象输出为自定义文件
set_pixel(x, y, color)
设定点(x,y)的颜色为 color(Color)。
然后读取自定义文件,在循环设定各点颜色。
邪恶的想法,可以54
hue_change(hue)
转换色相。hue 指定色相(360 度)的位移。
把hue换成0~360的任意整数(废话0
这个处理会花费一些时间。而且,因为转换误差,多次反复转换会丢失颜色。
draw_text(x, y, width, height, str[, align])
draw_text(rect, str[, align])
在该位图的矩形(x,y,width,height)或 rect(Rect)中描绘字符串 str。
这个再熟悉不过了,窗口绘字都要用到它
如果文本的长度超过矩形的宽度的话,则自动缩放为 60% 再描绘。
水平方向默认为左对齐,但是当 align 指定为 1 时为居中对齐,指定为 2 时为右对齐。垂直方向则总为居中对齐。
这个处理需要花费时间,尽量不要在每 1 帧中重描绘字符串。
text_size(str)
取得以 draw_text 方法描绘字符串 str 的矩形(Rect)。但是,不包含斜体的部分。
例4:(描绘文字)
begin
bitmap = Bitmap.new(640,480)
bitmap.font = Font.new(["黑体"])
bitmap.draw_text(bitmap.rect, "我爱赤点")#54我的自恋吧
p = Sprite.new
p.bitmap = bitmap
p.x = 0
p.y = 0
loop do
Graphics.update
if bitmap.font.size != 96
bitmap.clear
bitmap.font.size += 1
bitmap.draw_text(bitmap.rect, "我爱赤点")
p.bitmap = bitmap
end
end
end
每课一语:
bitmap只是显示的信息。
就好比内存中的图片文件,需要看图工具Sprite来显示
所以上面的例子都用到Sprite。
活用这些方法,上面的例子只是提供一种思路。
如有不明之处可回帖提出~ |
|