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

Project1

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

[原创发布] 赤点的游戏库教程(2)

 关闭 [复制链接]

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

跳转到指定楼层
1
发表于 2009-8-8 15:38:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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。
活用这些方法,上面的例子只是提供一种思路。
如有不明之处可回帖提出~
就算痛也要做,宅必备宅人的必备网站

Lv1.梦旅人

梦石
0
星屑
120
在线时间
92 小时
注册时间
2009-8-1
帖子
438
2
发表于 2009-8-8 16:01:32 | 只看该作者
支持赤点!学习了……谢谢分享~
哎呦,好像快要能发布一款游戏了,这次一定要低调!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3126
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

3
发表于 2009-8-8 16:05:03 | 只看该作者
教育:
(话说这个问题精灵和9R唧唧歪歪了好久……= =)
if self.disposed?
编译正确。
if self.disposed? == true
编译正确但是多了一次运算。
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

4
 楼主| 发表于 2009-8-8 16:16:49 | 只看该作者
谢谢指教,不过那样更容易被新手理解吧
就算痛也要做,宅必备宅人的必备网站
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
5
发表于 2009-8-8 19:29:09 | 只看该作者
get_pixel 常用作 hitTest 的核心“工作”  - -bbb
回复 支持 反对

使用道具 举报

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

6
 楼主| 发表于 2009-8-8 20:09:15 | 只看该作者
Hittest是什么啊?赐教
就算痛也要做,宅必备宅人的必备网站
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
7
发表于 2009-8-9 02:39:51 | 只看该作者
互相接触~

偶觉得用于按钮的制作最妙~可以通过get_pixel得出鼠标某点的颜色值和透明度从而不会出现一些囧囧的现象~ - -
具体看偶签名的那个 - - bb
回复 支持 反对

使用道具 举报

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

8
 楼主| 发表于 2009-8-9 04:43:40 | 只看该作者
说不定可以实现小绿的h图片过虑效果 鼠标座标用于做画图工具
就算痛也要做,宅必备宅人的必备网站
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 03:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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