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

Project1

 找回密码
 注册会员
搜索
楼主: 八云紫
打印 上一主题 下一主题

[RMVX发布] 新手教程--从0开始学RGSS2(2013-09-21 修复索引地址)

  [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
549
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

111
发表于 2011-3-24 08:05:32 | 只看该作者
软件工程吗..紫喵好强大,学习了
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
385
在线时间
7 小时
注册时间
2011-3-23
帖子
1
112
发表于 2011-3-24 15:38:50 | 只看该作者
更新喽~~跟帖~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

简史

梦石
0
星屑
115
在线时间
422 小时
注册时间
2008-7-4
帖子
736

开拓者

113
发表于 2011-3-24 17:49:42 | 只看该作者
精品什么的,最喜欢了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
190
在线时间
3 小时
注册时间
2011-2-21
帖子
2
114
发表于 2011-3-30 21:33:42 | 只看该作者
很好很强大啊!@
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
109 小时
注册时间
2011-3-29
帖子
17
115
发表于 2011-3-31 12:35:50 | 只看该作者
学过JAVA的应该看起来都可以容易!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4859
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
116
发表于 2011-4-17 21:09:21 | 只看该作者
偶尔看到完结了,API、pack、unpack、正则等都没有提及。
不过这些也是最复杂的那些。

点评

都乱了...  发表于 2011-4-17 22:33
好吧, 其实我也不知道我在写啥 = = 嘛嘛~~  发表于 2011-4-17 22:24
我那些也是嘛~实际上我是不大明白你说啥= =  发表于 2011-4-17 22:17
毕竟是脚本教程什么的吧, 大概~~~  发表于 2011-4-17 22:14
嗯,不过很难解释...八云你不加"回复可见"也很多人支持呢!(我貌似已经彻底的打沉了= =)  发表于 2011-4-17 21:34
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
33 小时
注册时间
2011-4-28
帖子
20
117
发表于 2011-5-10 20:18:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

狂気の月兔

梦石
0
星屑
236
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

118
发表于 2011-5-11 10:50:41 | 只看该作者
回复 selintt 的帖子

RPG 模块说白了, 就是 data 里文件的基本数据结构, 用来保存大部分的 游戏数据, 比如 道具, 武器, 敌人什么的. 当然不包括图片.

这个看 F1 , 搜索 "RPG::" 就可以看到了~~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2011-1-12
帖子
42
119
发表于 2011-5-12 15:19:00 | 只看该作者
本帖最后由 爱丽丝·玛格特罗依德 于 2011-5-12 15:24 编辑

API and Win32API


1. 什么是 API
       刚刚接触到 API 的人都会问这个问题, "什么是 API? 有什么用?"
       API 的全名是 "Application Programming Interface" , 也就是 "应用程序编程接口" . 这么说, 其实很笼统. 具体点的, 就是说, API 是预先就定义好的一组函数,  我们只要知道这个函数的参数, 就可以来调用某个 API 来实现某些功能. 至于 API 函数是怎么实现的? 我们不管它, 我们只需要知道 这个函数 做什么用的就可以了. 要注意的是: API 的函数都是存在于 dll 中的.

       API 有什么用? 我们知道, RGSS2 其实就是 Ruby 语言, 但是 RGSS2 由于 EB 在编写的时候, 无意或者故意性的屏蔽了某些方法, 关键字等, 使得我们想扩展 VX 的功能有点障碍. 但是, 有了 API 这个接口, 也就不怕了. 举个例子, 网络游戏通信的核心就是 C++ 的 Socket 库, 它本身就是一个 Window API . 并且, 默认的 VX 没有提供这个功能, 那么我们就只能使用这个 API 函数库来扩展.

      API 的分类. 我个人喜欢把 API 分成两类, 这个仅仅只是我个人的观点. 一类是 Window API . 它有微软提供能我们的. 用来为编程者的程序实现或者添加某些功能. 还有一类就是 自定义的 API . API 的实现由程序员编写测试, 然后封装到 dll 里, 给其他的程序使用.

2. Win32API
      幸运的是, EB 没有屏蔽一个关键的类 Win32API . 这个类就是负责 dll 文件的加载和 API 函数的调用. 来看下基本语法:

       变量 = Win32API.new("dll文件名", "API函数名", "API函数的参数类型", "API函数的返回类型")

      ★ dll文件名: 指明某个包含后续需要调用的 API 的 dll 文件名字, 比如常用的 user32.dll 等;
      ★ API函数名: 指明这个 dll 里 导出的 API 函数的名字;
      ★ API函数的参数类型: 查看手册可以查到 API 的参数类型, 选择有下面4个:
             ☆ "p"          指针
             ☆ "n" or "l" long
             ☆ "i"           int
             ☆ "v"         void
      ★ API函数的返回类型: 查看手册可以查到 API 的返回类型, 选择和上面的一样.

3. 如何使用 APi
      我们来举一个简单的例子, API 函数是  MessageBox .
      这个函数的功能是 显示一个 消息提示框 . 参数和返回值可以查找 APi手册或者是 百度百科. 引用下 百度百科:

函数原型 : int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType)
函数速查: Windows:3.1及以上版本:Windows:95及以上版本;Windows:1.0及以上版本;头文件:Winuser.h;库文件:USer32.lib;URicode:在Windows NT上实现为Unicode和ANSI两种版本。


      从以上的信息, 我们可以得到:
      ★ dll文件名: user32.dll , 这个可以看到 库文件:USer32.lib , 这个 lib 的名字就可以对应一个 dll .
      ★ API函数名: MessgaeBox , 就是我们需要的, 注意大小写.
      ★ API函数的参数类型: 这个需要一点点 C++ 知识. 没有的话, 可以参考 VB 的 API 手册, 都是一样的.
可以知道 MessageBox 的参数有三个,
         HWND hWnd : 类型是 HWND, 可以知道, 不是 v 不是 i 也不是 l (这里其实就是 l . ), 那么就只能是 p ;
         LPCTSTR lpText,LPCTSTR lpCaption; 这两个类似的判断和之前的一样, 只能是 p , 表示字符串.
         UINT UType: 看不出来是啥, 于是 继续百度 define UINT , 于是可以查看 #define uint unsigned int , 于是 知道是 i (出现了 int), 至于为什么这个查找, 参考 C++ 的 #define .
      ★ API函数的返回类型: 就是第一个单词, int 于是就是 i .
      注意一下: 如果某个 API 没有参数的, 参数3 可以简写成 nil 或者 "v". 返回值是 void 的话, 参数4 也可以简写成 nil , 或者 "v"


    然后来创建一个 WIn32API 类的实例:
    messagebox = Win32API.new("user32.dll", "MessageBox", "pppi", "i")
    这里注意的是, 参数3 有多个参数的话, 可以写成 字符串 或者  %w( ), 其实也是字符串

    创建之后就可以来使用了, 使用的方法是 call 方法. call 方法的参数, 参考我们之前创建的 参数3 或者函数原型.

    messagebox.call(
        0,                    # 第一个参数是 HWND, 窗口句柄, 可以不去理会他, 填写 0 即可.
        "Hello World",  # 第二个参数是一个字符串, 就是 提示框需要显示的内容
        "Message",      # 第三个参数还是一个字符串, 表示提示框的标题
        0)                   # 最后一个参数是 提示框的类型, 不常用的, 可以直接写  0.

    这样就可以实现调用一个 API 了
      
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
120
发表于 2011-5-12 22:07:14 | 只看该作者
回复 爱丽丝·玛格特罗依德 的帖子
API 是预先就定义好的一组函数,  我们只要知道这个函数的参数, 就可以来调用某个 API 来实现某些功能. 至于 API 函数是怎么实现的? 我们不管它, 我们只需要知道 这个函数 做什么用的就可以了. 要注意的是: API 的函数都是存在于 dll 中的.

DLL 中的函數所建立的語言綁定算是R界狹義的 API 吧。廣義的 API 泛指一切連結兩個應用實例的通信橋梁,所以類庫,網絡協議,Web 服務都是 API。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-10 22:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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