查看: 3014|回复: 4

[RMXP发布] [情人节??] Roost v1.8 测试工程为XP特化

[复制链接]
头像被屏蔽
梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
回帖
1577

开拓者

发表于 2012-2-14 04:00:29 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
梦石
0
星屑
50
在线时间
24 小时
注册时间
2012-2-14
回帖
8
发表于 2012-2-14 04:40:40 | 显示全部楼层
本帖最后由 花晴兰 于 2012-2-14 06:43 编辑

http://sourceforge.net/projects/roost/
晴兰的帐号出现了一点问题,仅仅是为了负责,对Roost v1.8.rar进行hash,

MD5:A7FCA99303212CCF47D94A3F2EE915D5
SHA1:DC9C0C0A15523A1FBA43775F05F089C16CF2C060

1经验仅仅是统计用,也可以直接联系我来索取一份Roost v1.8
另外@凌童鞋关于
http://rpg.blue/forum.php?mod=vi ... 6orderby%3Dlastpost
提到的仔细介绍,一并放在这个升级版里面了,

Roost是晴兰的一个原创或修改的脚本库,旨在RGSS惯例脚本语法上,尽量上改进脚本性能和增强脚本功能,
尤其是密集像素计算或者其他外部操作,工程中有详细测试和范例代码。

Roost根据协议选择外部组件,使脚本尽量能够被商业或者非商业应用,如果您的游戏使用了Roost作为开发基础之一,而且有可能被商业化,小女子将不胜荣幸,但是请注意阅读Roost和Roost关联组件的版权说明,Roost本身含有的非RPG Maker的dll是LGPL协议的,可选组件tcc是LGPL协议,OpenCV是BSD协议,如果需要修改代码重新发布,请仔细阅读协议文字,以避免任何可能的纠纷。

(快吐槽这种文风,话是这么说的,自己都认真得受不了了{:nm_9:} )


原创脚本说明:

Roost.CFactory: Roost.libTCC已经改为Roost.CFactory以tcc作为C后端,而RGSS作为语法前端的一个工具,
出于tcc协议的尊重,是不能用tcc名字做宣传的,故已修改。


也就是说,写的是RGSS,生成的是C的代码并可以运行。它的前端是Ruby代码或者自定义程序代码(@某叔),推荐用Roost.PP兼容的预处理器进行处理。

Roost.PP是使C语法向Ruby语法过渡的预处理器模板类,出于灵活性,尚需实现具体的预处理器,也就是说,描述的是如何把写的代码转换成C。Roost.CUtils.CPP1是一个具体的预处理代码,是一个低级的预处理器,如export{add}表示导出add符号,而不需要写麻烦的__declspec(dllexport) __stdcall add,实现见工程。

Roost.Static是一个Cache模块,对应实现了类型Roost::Static::StaticClass。
有些素材,希望或者只能在游戏运行时生成,而且只生成一次,如游戏地图的小地图,或者游戏地图为基础的战斗背景,或者行走图或者战斗图为基础的战斗卡片。
或者为生成这种素材加速的DLL的源代码,可以放在Roost.Static里面,使得这种操作只进行一次。

Roost.Dynamic和Roost.Dynamic.DynClass 使DLL的使用和Ruby无缝接触,尽量简化操作,至少简化了.call和参数说明,对于浮点类型和其他类型有待完善,下面是测试代码中的一段

[pre lang="ruby" line="1"]class Wnd; end;
  SW_SHOW = 5
  SW_HIDE = 0
  xx=Roost::Dynamic::DynClass.new('user32',
    {:__ctor => "CreateWindowExA",
     :__dtor => "DestroyWindow"
    })
  xx.attach(Wnd);
  #上面为定义
  r = Wnd.new
  r.dyncreate 0, "Button", "Hello", 0x10cf0000, 0, 0, 640, 480, 0, 0, 0, 0
  r.ShowWindow  SW_SHOW
  r.MessageBoxA "Hello",Roost::CharConv.u2s("从子窗口获得的信息", 128), 16
  r.ShowWindow SW_HIDE
  r.dynuninit[/pre]
而对应的C代码为:
[pre lang="C" line="1"]
#include <windows.h>
//链接user32.dll的代码
//上面为定义
HWND h = CreateWindowExA(0, "Button", "Hello", 0x10cf00000, 0, 0, 640, 480, 0, 0, 0, 0);
ShowWindow(h, SW_SHOW);
MessageBox(h, "Hello", "...", 16);
ShowWindow(h, SW_HIDE);
DestroyWindow(h);[/pre]
和C代码是很相似的,如果您使用MFC,会发现另一种相似性,这里在下由于对MFC不大熟悉,所以不敢多言。

Roost::CUtils是一组实用工具对象,在下会慢慢完善
其中RBMP.op2是一个试验中的位图变换函数:
用法:首先将rbmp关联到Bitmap类
[pre lang="ruby" line="1"]xx=DynClass.new('rbmp.rax', {
      :__ctor=>:getBitmap,
      :__dtor=>:releaseBitmap,
  })
  xx.attach(Bitmap)
[/pre]

假设(RMXP)(a,b是两个位图, 进行操作的如果是两个位图,暂时必须有相同的宽和高)
[pre lang="ruby" line="1"]a,b =RPG::Cache.battler('001-Fighter01', 0),   RPG::Cache.battler('001-Fighter01', 0)
#就可以
a.dyninit;   b.dyninit
a.op2(b, "ab+a=", -1)     #逆波兰式 a=a+b(仅仅是抛砖引玉
=begin
或者
a.op2(0, "aHa=", -1)                     # a=水平翻转(a)
a.op2(b, "aaHb&+a=", -1)            # a=a+水平翻转(a) 位与 b
=end
b.dynuninit; a.dynuninit
[/pre]

op2有很多限制,只能是相同的宽和高,只有1个临时图片,所以说"a~b~"是会覆盖的,使用了逆波兰式,
  (逆波兰式参考http://rpg.blue/thread-200922-1-1.html @DeathKing)
有限的操作:
  a b r          参数1入栈 参数2入栈 上次的结果入栈
  H V F ~     分别是弹出栈顶一个元素 进行水平翻转,竖直翻转,H+V的翻转,取反,结果入栈
  + - & | ^   分别是弹出栈顶二个元素 进行像素加,像素减,像素与,像素或,像素异或,结果入栈,ab-的结果是a-b
  =              栈顶二个元素的复制,ab=的意思是b=a,请不要弄反了……

欢迎同好批评指正
回复

使用道具 举报

梦石
0
星屑
120
在线时间
5250 小时
注册时间
2011-10-7
回帖
1769

开拓者贵宾

发表于 2012-2-14 07:35:03 | 显示全部楼层
单纯来支持一下的路过~
(当纯水处理吧……单纯想支持一下……)

评分

参与人数 1星屑 -100 收起 理由
Kimu -100 凌你这算是捣乱了orz

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
24 小时
注册时间
2012-2-14
回帖
8
发表于 2012-2-14 07:52:35 | 显示全部楼层
本帖最后由 花晴兰 于 2012-2-14 08:29 编辑

各位抱歉,其实是主帐号出问题了……
注册了马甲,结果简介楼出问题被吞了……
坐等修复,而且工程里面也有较详尽的注释和用法
暂时只好上街卖花了……

现在简介好了…… 感谢版主大大 @fux2

4.gif

点评

先去水区玩会吧,今天版聊发经验的哦~  发表于 2012-2-14 07:57
回复

使用道具 举报

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
回帖
218
发表于 2012-2-14 09:56:34 | 显示全部楼层
虽不明,淡觉触……
收藏了~

点评

我错了……  发表于 2012-2-15 09:14

评分

参与人数 2星屑 +10 收起 理由
orzfly + 20 塞糖
Kimu -10 勿水

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部