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{},

因此重新进行了绘制.

 

实现:

 

手抽去重发明两个boost的轮子

2014 年 1 月 18 日

调的心情郁闷了
http://codepad.org/2lep9EjC
http://codepad.org/ChE9zOgB

用Windows批处理做网站

2014 年 1 月 7 日

其实在上古时代也没有php啦asp这些神器。。有perl或者甚至C语言来做服务器网页就已经很不错了。。。这里的本质是通过执行这些程序,输出的文本,当做HTTP内容返回。如果你看见有些老网站的地址中有/cgi-bin/,那基本上就是了。

这里兰兰用的是WAMP,windows下的一个一键快捷安装的个人服务器套件。如果你没有修改他的设置,比如装在C:\WAMP,那么这个目录应该是C:\WAMP\cgi-bin,新建一个hello.cmd,输入下面的代码:然后访问http://localhost/cgi-bin/hello.cmd?name=Hello&var=3就可以看到结果。不过这个代码的最后一行set %b:~1,-1%和中间某行call :parse_uri “%QUERY_STRING%”实际上可以被注入代码,因此用于生产环境是很不安全的,这里仅仅是用来卖萌(demostration)。

 

 

 

[RGSS]RGStorage 1.00

2013 年 12 月 16 日

介绍

RGStorage实现了一个通用的存储类,统一接口,可以从以下实际或虚拟文件系统来读写文件资料

并可以通过可选的扩展来读写

同时在以上的基础上重定义了require方法,也可以混入Object,使它能像普通的Ruby的require一样工作,但不局限于require具体文件,比如:

基本用法:

把一个类似于文件路径的字符串叫做资源标识符(resource identifier, rsrc_id)。

因为可以通过RGStorage::Active来重新设定关联,以下的用法的举例与默认关联有关。

1.RGStorage.get rsrc_id

取得资源的内容

2. RGStorage.set rsrc_id, content

设置资源的内容

3. RGStorage.copyTo rsrc_id1, rsrc_id2

复制资源内容,相当于RGStorage.set(rsrc_id2, RGStorage.get(rsrc_id1))

基本设置:

默认设置是:

其中每一个设置的格式为,

[ 匹配条件, 文件系统, 转换器1, 转换器2, 转换器3,…]

匹配条件可以是正则表达式,范围,或者一个接受一个参数返回真假值的lambda/proc

文件系统是RGFileSystem类的实例,或者实现了get/set方法的对象,如果可以get/set一个rsrc_id,那么get/set的调用将返回一个lambda{|rsrc|}(get)或者lambda{|rsrc, content|}(set),否则应该返回nil,这是用来测试一个文件是否可读/可写

转换器也是实现了get/set方法的对象,或者RGFormatter类的实例,但get/set直接返回转换结果,比如MarshalFormatter的get方法是对输入(记为input)返回Marshal.load(input)的结果, 而set刚好相反。

 

RGSSType alpha 0.1

2013 年 11 月 27 日

一个用于直接在RGSS3的位图上写文字的类,

不经过bitmap.draw_text,而是直接写像素,

就算RGSS3启动时没有安装字体,安装字体之后使用RGSSType.new仍然有用

这个版本只实现了一个简单的写字体方法,而且并没有作为Bitmap的方法被定义

用法:

RGSSType#font

返回RGSSType使用的Font对象,可以设置他的字型字号颜色等, 文字轮廓阴影暂时不支持。

RGSSType#writetext(bitmap, string, x, y, color[, height])

在bitmap上,从(x, y)开始书写文字string, height

 

SAFX进展报告(updating)

2013 年 11 月 23 日

2013/11/13 13:55

下一步:

 

目前的进展的例子:http://codepad.org/VFmwq4jp

基本约定:所有这种返回字符串用来eval的函数叫usefunc

编译为DLL之后,RGSS中写一行use “1.dll”就行了
或者严格点use “1.dll”, “imported”
use DLL名, usefunc名(缺省是imported)
之所以叫imported是因为你可以用它仅仅是导入同dll的所有其他函数等等:

C 代码复制打印
  1. USEFUNC(math);
  2. USEFUNC(color);
  3. USEFUNC(imported){
  4.    this_is_a_usefunc;
  5.     use(“math”);
  6.     use(“color”);
  7.    end_usefunc;
  8. }
  1. module(A)
  2.           def(“self.add”, add)
  3.           def(“self.sub”, sub)
  4.           defva(“self.sum”, sum)
  5. end

的例子解释

Ruby里面直接用
A.add(3,5) A.sub(4, 6) A.sum(1,2,3,4,5,6,7,8,9,10)等来调用

上面defva的意思是自动打包不定参数(所有类型def的打包方式定义在safx.h里面,(白字:不是stdafx.h))

【原创】论另一种把Ruby翻译成其他语言的思路(不需要AST相关)

2013 年 6 月 3 日

转载本文在您同意接受CC协议(NC-ND)情况下进行,可以参考:

http://creativecommons.org/licenses/by-nc-nd/3.0/

1. 目的。

给一个Ruby程序,把他翻译成语义上等价的其他程序。下面全部以C++为例,且不需要处理AST。 read more

编译原理学习手记(1)– 代码生成(updating)

2012 年 12 月 26 日

代码生成原理在何炎祥教授的编译原理书(《编译原理》第三版,华中科技大学出版社)上是第12章,可以认为是理论说明的最后一章,后面两章分别是讲LEX和YACC这两个经典工具的使用,我们反过来阅读,是为了从目标出发,每一步都接近结果。

read more

晴兰的反向Ruby教程-2 RMVA小程序

2012 年 11 月 22 日

上一节我们学习了Ruby的消息,如何定义消息(方法,我们在这里不需要区分消息与方法,可以认为是一样的),现在当你去看F1手册时,看到的都是模块、类和方法名。下面试试来做更多的事情。
RMVA的手册在写本文时大约没有完整的中文版,但就像XP、VX、VA各版本的手册的”RGSS参考>标准库>预置函数”一节开宗明义都会说到的,像system这种函数,事实上是Kernel模块的一个方法,以消息编程来看,不指定对象,我们发消息的对象是Kernel。也可以指定对象,用”对象.方法”来调用。因此事实上是这个样子的: read more

← Previous Page
Next Page →