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

Project1

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

[已经解决] 如何让自己的引擎支持RGSS系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
跳转到指定楼层
1
发表于 2010-10-20 14:02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如题~
想自己开发引擎,地图编辑器基本完成。为后续扩展方便,打算后期加入脚本系统。
当然,如果可以让自己的引擎直接支持一个成熟的脚本系统,就再好不过了,可以省去脚本系统开发的时间和不少不必要的麻烦。
夏娜大人的RGE引擎似乎完美的兼容了RGSS,官方说法“Ruby Game Engine使用了 RGSS 扩展类库”。
求教各位大神:有没有什么方法可以直接在自己的引擎里内嵌RGSS系统?RGSS 扩展类库是什么?这个是不是我在寻求的工具?
感激不尽~

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2010-10-20 14:20:26 | 只看该作者
你只要在底層仿個RGSS封裝層的接口就可以了。
需要甚麼接口?Help當中有說……

评分

参与人数 1星屑 +300 收起 理由
fux2 + 300 认可答案~

查看全部评分

不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
3
 楼主| 发表于 2010-10-20 14:32:44 | 只看该作者
回复 禾西 的帖子
谢谢您的回答,不过,可不可以麻烦您说的更详细一些?RM本人还在龟速学习中^_^
另外,还想请教一下,您说的这个方法有无宿主语言的限制?比方说只能使用C语言等等。
非常感谢~


   
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

4
发表于 2010-10-20 14:47:29 | 只看该作者
本帖最后由 铃仙·优昙华院·因幡 于 2010-10-20 14:52 编辑
  1. HINSTANCE hInst;
  2. hInst = LoadLibrary("RGSS202E.dll");

  3. typedef int (_stdcall *fRGSSInitialize)(HINSTANCE);
  4. typedef int (_stdcall *fRGSSFinalize)(void);
  5. typedef int (_stdcall *fRGSSGameMain)(HWND, char*, char* /* ini */);
  6. typedef int (_stdcall *fRGSSEval)(char*);

  7. /* typedef int (_stdcall *fRGSSSetupRTP)(char*, int, int); */

  8. fRGSSInitialize RGSSInitialize = GetProcAddress(hInst,"RGSSInitialize");
  9. fRGSSFinalize RGSSFinalize = GetProcAddress(hInst,"RGSSFinalize");
  10. fRGSSGameMain RGSSGameMain = GetProcAddress(hInst,"RGSSGameMain");
  11. fRGSSEval RGSSEval = GetProcAddress(hInst,"RGSSEval");
  12. fRGSSSetupRTP RGSSSetupRTP = GetProcAddress(hInst,"RGSSSetupRTP");

  13. ---------------------------------------------------------------

  14. 调用顺序是:
  15. 1. RGSSSetupRTP 获得 RTP  // 不知道参数,所以,Orz
  16. 2. RGSSInitialize 初始化 RGSS 解析器. // RGSSInitialize(hInst)
  17. 3. RGSSGameMain 游戏主循环 // RGSSGameMain(窗口句柄, 脚本文件名, ini文件名) 好像是这样的

  18. N. RGSSEval 调用 // RGSSEval(脚本)

复制代码
目前的研究结果~~~ 不全~~, 不过大概是 Game.exe 里的调用顺序,细节没写出来~~~

点评

= =  发表于 2010-10-20 19:30
……囧,我找找某个神奇的东西  发表于 2010-10-20 19:23

评分

参与人数 2星屑 +700 收起 理由
六祈 + 400 辛苦了
fux2 + 300 认可答案~

查看全部评分


《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

5
发表于 2010-10-20 14:48:01 | 只看该作者
大抵都和C接合。具體是引用dll庫或者so,require或者Win32API。
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
6
 楼主| 发表于 2010-10-20 15:01:30 | 只看该作者
回复 铃仙·优昙华院·因幡 的帖子
铃仙大人是用反汇编一点一点跟出来的吗?好了不起啊~
如果能搞到game.exe的代码就好了~
我的引擎用C#写的,不晓得行不行,实在不行就只能嵌非托管了=_="
非常感谢您~


   
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

7
发表于 2010-10-20 15:04:14 | 只看该作者
本帖最后由 铃仙·优昙华院·因幡 于 2010-10-20 15:05 编辑

回复 独孤残云 的帖子

仅仅是初学。 需要 Game.exe 的源码需要逆向。不过不知道 EB 同不同意就是了。

再说,咱也没那个能力~~~




然后是, 以上未测试。

其实可以去问问 RGE 里的大大们原理~~~
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
14 小时
注册时间
2008-5-7
帖子
74
8
 楼主| 发表于 2010-10-20 15:05:02 | 只看该作者
本帖最后由 独孤残云 于 2010-10-20 15:38 编辑

回复 禾西 的帖子
C的dll加载分静态和动态两种,不过一般针对于C的SDK大都会提供.h、.lib和相关的库。RGSS中似乎没有看到这些资源。
还是很感激您的提示~ 谢谢~

继续求教各位高人~

   
==============================
糟~ 不知不觉就连帖了,向各位版主大人道歉……

回复铃仙大人:

残云是杂兵,还没资格到高级版发帖:'(

动态加载用的不太熟,谢过铃仙大人指教~

==============================

继续期待各位大神的指导~~ 感激不尽~

点评

ruby的解釋器被封裝了,所以你才找不到  发表于 2010-10-20 15:30
动态加载不需要 lib h 文件的说~~~ >  发表于 2010-10-20 15:06
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

9
发表于 2010-10-20 15:24:03 | 只看该作者
回复 独孤残云 的帖子

C# 不会, C++ 的是这样的。

比如说有个 dll 名字是 add.dll , 导出了一个函数 int _add(int, int), 加载就是这样:

HINSTANCE hInst;  //句柄
hInst = LoadLibrary("add.dll"); // 动态加载 add.dll

typedef int (_stdcall *dll_add)(int, int);  // 声明一个函数指针,用来指向导出的函数

dll_add d_add = GetProcAddress(hInst,"_add"); // 获取导出函数的地址。

print("1 + 2 = %d \n", d_add(1, 2)); // 然后就可以正常使用了~~

   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

旅之愚者

梦石
0
星屑
240
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

10
发表于 2010-10-20 15:43:28 | 只看该作者
回复 独孤残云 的帖子
能在RGE版回帖么?需要的话你可以在xp区发个提问题,然后愚者帮你转移过去

评分

参与人数 1星屑 +300 收起 理由
fux2 + 300 认可答案~

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-4 13:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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