RGSS3Facets 0.02

2014 年 2 月 23 日

0.02

Class:
#基于类的通用cache系统,比如
x = Bitmap.cache(“Graphics/Parallaxes/Mountain4”) #你懂的
y = Bitmap.cache(“Graphics/Parallaxes/Mountain4”)
# x.object_id == y.object_id应该成立,同一个位图
#Bitmap.clear_cache #你懂的
#也可以是自定义对象
class A
def initialize(a, b)
@a, @b = a, b
end
end
x = A.cache(3, 5)
y = A.cache(3, 5)
#应该是同一个对象

# RGSS3Facets::CachePolicy 奇怪的东西:
Bitmap.cache_policy = RGSS3Facets::CachePolicy::Default #Cache在内存中,以Hash的形式记录,类似于默认脚本的Cache或者RPG::Cache
Bitmap.cache_policy = RGSS3Facets::CachePolicy::Marshal.new(Bitmap) #Cache不是在内存中而是以Marshal形式存到磁盘上
Bitmap.cache_policy = RGSS3Facets::CachePolicy::BareMarshal.new(Bitmap) #Cache不是在内存中而是以Marshal形式存到磁盘上,而且没有Marshal头,仅仅是直接调用了_dump和_load

Bitmap:
#Bitmap::MarshalPolicy bitmap的marshal方案可以是
Bitmap::MarshalPolicy = Bitmap::BitmapMarshalPolicy::Raw # [width, height, data].pack(“LLa*”)
Bitmap::MarshalPolicy = Bitmap::BitmapMarshalPolicy::RawCompress # [width, height, Zlib::Deflate.deflate(data)].pack(“LLa*”)
Bitmap::MarshalPolicy = Bitmap::BitmapMarshalPolicy::BitmapFile # Marshal内容相当于savebmp做的,也就是一个合法的bmp文件内容

Object:
load_script(name) #也就是eval read_data(name), TOPLEVEL_BINDING, “Load Script: #{name}”, 1

0.01

Object:
font.assign(:size=>5, :color=>Color.new(255,0,0,255)) # font.size=5; font.color = Color.new(255,0,0,255)
object.self # 返回本身,为了某些场合可以用&:self
object.deepcopy #=>某种深拷贝,也就是Marshal.load Marshal.dump object
object.template(“{{a}}, {{b}}”)#=>模板替换,也就相当于是”#{obj.a},#{obj.b}”,但模板内容可以是变量。
私有:
read_data(“Data/1.txt”) #=>读取Data/1.txt的内容,可以是加密包中的内容
write_data(“Data/1.txt”, “Hello”)#=>把Hello写到Data/1.txt,只能是磁盘上的,不会变更加密包
sugar(/\b类\b/){“class”} #=>宏替换,$RGSS_SCRIPTS.each{|x| x[3].gsub!(/\b类\b/){“class”}}
with(obj){}#=>obj.instance_eval{}
a = 5
ref{}[“a”]=3
a = ref{}[“a”]#=> 上下文变量的字符引用

Module:
Sprite_Base.each_object{|x| p x}#遍历Sprite_Base的实例
Vocab.each_constant{|value, name| p value, name}#遍历常量,以值和名的形式
MyModule.to_class #生成一个include了本模块的类(可以new了)
attr_constant :a, 5# 相当于def a(); 5; end

Proc:
lambda{|x| a}.call(a,b,c)可以写成lambda{|x| a}.update(a,b,c) lambda{|x| a}.fire(a,b,c)随便什么方法名都行
用method_missing实现的,不一定是call了

Range:
(1..5).clamp(a) # 如果a<1返回1 如果a>5返回5 否则返回a

Rect:
rect.each_slice(5, 5) do |r| … end # 将这个rect均匀分成5×5的部分,每一部分调用一下迭代器

Exception:
ex.raise # reraise ex
ex.translate(新的消息) # 返回一个和ex只有消息不同的异常对象,也就是ex.exception的别名

IO:
IO.binread(“1.txt”) #二进制读取1.txt
IO.binwrite(“1.txt”, “Hello”)#二进制写入1.txt

Symbol:
to_proc(这个功能VA本来就有)

String:
self.note.match_notes “<itemid = {{item}}>”, “<skillid = {{skill}}>”#如果self.note是一个”<itemid = 5> <skillid = 3>”的话,返回一个hash {“item”=>5, “skill”=>3}

Bitmap:
bitmap.repeat_blt(bitmap.rect, another_bitmap, another_bitmap.rect)#尽可能平铺绘制another_bitmap的rect部分的内容
bitmap.address:位图地址
bitmap.savebmp(“1.bmp”): 以bmp格式保存为1.bmp
bitmap.savepng(“1.png”):以png格式保存为1.png
bitmap.getBitmap(rect) : 返回rect部分构成的新位图
bitmap.split(:A=>[0,0,128,128], :B=>[0,128,128,128]):返回一个hash,其中hash[:A]= bitmap.getBitmap(Rect.new(0,0,128,128)),类推
bitmap.with_tone!(tone)
bitmap.with_tone(tone) #用指定的色调tone来处理本位图

(下面是还在测试和修正的内容)
Sprite:
sprite.image #返回sprite能看到的图形,没有考虑tone,wave系列,考虑了src_rect
Plane:
plane.image #返回plane能看到的图形,没有考虑tone,考虑了屏幕大小和循环的情况

 

 

Seiran API v1.7 beta 0.04 for RGSS

2014 年 2 月 19 日

一种新的调用API的包装,因为API不包装也可以调用,其实就是自己的脚本综合练习一类的东西吧:

用法:

鼠标指针:

 

自定义结构体的鼠标指针:

 

 

 

BMVC for RGSS 1.00

2014 年 2 月 4 日

1. BMVC是什么?

BMVC是RGSS中实现多个窗口或者精灵,或者他们的混合架构的一个脚本,可以用来简化代码。
相对于单个的窗体Window/精灵Sprite而言,BMVC可以同时有多个显示对象被控制。比如应用物品时,物品描述窗口,物品选择窗口和对象选择窗口是三个窗口,但有关联。可以用BMVC实现。
而相对于场景Scene而言,BMVC比Scene要轻量,也可以嵌入Scene中。
所以也可以放在事件中,比如一个物品选择窗口,没必要创建一个类。

BMVC是RGSS系列上对MVC模式(http://zh.wikipedia.org/wiki/MVC)的一个特化实现,因为RGSS默认脚本本身已经实现一系列与模型有关的东西比如$game_…,这里只需要和他们建立各种关系即可,这种关系模型在本脚本叫做BindingModel,故本脚本命名为BindingModel-View-Controller

2. 如何使用?

有两个重要的方法,一个是K,一个是B,K创建视图和有关的控制器,B创建和模型的绑定。

写在K里面的self.xxx,如果他是一个window或者sprite的话,会自动update和dispose

 

第一个例子,显示一个有Hello world的窗口,按回车(Input::C)时退出,因为不含任何可变的数据,所以没有用到B。

 

下面这个例子的窗口将要显示一个全局变量$a,并且当你按下回车键时,$a会加上1,并且显示也对应变化,注意变化的部分用B{}括起来。相对于上面那个例子,实际上就是把不变的”Hello world”换成了变化的$a.to_s,这里我们用B{$a.to_s}括起来。(同时加上了contents.clear清除内容这样的行为,不然前后写的文字会重叠在一起)

 

因为按下回车键时,$a加上了1,所以$a.to_s会变化,B{$a.to_s}会把这个变化反馈给外面那个B{},

因此重新进行了绘制.

 

实现: