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

Project1

 找回密码
 注册会员
搜索
楼主: 天地有正气
打印 上一主题 下一主题

[RMXP发布] RGSS1脚本教程 重写!!!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2014-1-14
帖子
52
21
发表于 2014-1-31 10:11:09 | 只看该作者
窝觉得不错啊面向我这种新手还是比较好的入门教程 现在别的不说我好想知道如何改菜单布局_(:з」∠)_应该快更了吧
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
22
发表于 2014-1-31 13:39:21 | 只看该作者
标题让我想到了癫狂侠客的视频讲解。希望内容不是雷同的。
潜水,专心忙活三次元工作了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
90
在线时间
85 小时
注册时间
2012-5-27
帖子
148
23
发表于 2014-1-31 13:43:30 | 只看该作者
恩恩,还可以,适合新人
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-8-21
帖子
6
24
发表于 2014-1-31 15:30:38 | 只看该作者
看帖回帖是美德~~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

25
 楼主| 发表于 2014-1-31 20:24:46 | 只看该作者
插楼!
第一章已经结束!下一章我准备写如何创建窗口,为更改菜单打下基础。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

26
 楼主| 发表于 2014-1-31 20:36:53 | 只看该作者
第七章  创建第一个窗口(1)

窗口类其实很简单的,我们可以先从在地图上显示一个地图名开始。

首先,请输入一下内容。
class Window_MapName < Window_Base
end
这是创建一个窗口类Window_MapName,关于创建类,可以参考F1帮助手册。
这个 < Window_Base ,是说它是Window_Base子类,这样的好处是可以继承Window_Base的方法,可以方便的创建窗口。
接下来,要做的是在这个类里面添加一个初始化方法,关于方法,也请参考一下F1,这个初始化方法名是固定的,叫做initialize

def initialize
    super(0,0,160,80)
end
这是添加initialize方法的代码,其中super是继承父类的参数,意义是(x,y,width,height),这就是窗口的基本属性。
我们在地图上新建一个事件,在里面输入事件脚本"$w = Window_MapName.new",这些代码的意义可以暂且不管,是生成实例的。接下来通过独立开关调至第二页,选“并行处理”,里面用事件脚本,“$w.update”,调用了Window_MapName的update刷新方法。说道这里可能有点混乱了,我想以最简单的语言来解释一下生成实例。$w是一个变量,用它生成了Window_MapName的实例,就相当于把$w代入了这个窗口,$w就变成了这个窗口了,所以可以用update方法来刷新,因为它继承了父类Window_Base的方法,所以update是调用Window_Base的update方法。

本讲结束。可能有错误,欢迎指正!

评分

参与人数 1星屑 +50 收起 理由
怪蜀黍 + 50 发布奖励

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

27
 楼主| 发表于 2014-2-1 19:59:10 | 只看该作者
第八章  创建第一个窗口(2)

在上次的super后面,插入两行。
self.contents = Bitmap.new(width - 32, height - 32)
refresh
第一行暂且不管,窗口类必定有的,第二行是调用refresh方法。接下来就定义一下refresh方法。
关于方法的定义,是用def~end语句,具体请参考F1帮助手册。

def refresh
    self.contents.clear
end
这里面的clear是清除的意思,是bitmap类的方法。因为刚刚那句脚本,self.contents变成了Bitmap类的实例,就拥有
了bitmap类的方法。bitmap类的方法很多,可以打开F1 -> RGSS参考 -> 游戏库 -> RGSS内部类 -> Bitmap,会看到许多东西。
其中,我们现在要用到的是clear方法draw_text方法,这也是Bitmap类里中很重要的方法。

为什么要clear呢?因为接下来我们要用draw_text描绘文字,每次刷新一遍的话,会反复描绘,所以,在描绘之前要先清除一下。
我们来看draw_text。
draw_text(x, y, width, height, str[, align])

参考注释,就能明白了。
我们可以这样写:
self.contents.draw_text(0,0,66,22,"新手村")
有人可能问了,为什么宽度是66?因为“新手村”所占的字符宽度是66,至于是怎么算出来的,以后再说,22是文字初始的高度。

打开游戏测试一下,应该成功了。
  1. # 本章代码
  2. def refresh
  3.     self.contents.clear
  4.     self.contents.draw_text(0,0,66,22,"新手村")
  5. end
复制代码

评分

参与人数 1星屑 +100 收起 理由
怪蜀黍 + 100 发布奖励

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

28
 楼主| 发表于 2014-2-1 22:10:38 | 只看该作者
第九章  创建第一个窗口3

这一节主要是讲上一次是如何得出那个66的 = = 刚刚发现和66rpg的66一样..好吉利 = =

大家可以打开帮助,找到Bitmap,看到最后面有一个方法。
  1. text_size(str)
  2. 取得以 draw_text 方法描绘字符串 str 的矩形(Rect)。但是,不包含斜体的部分。
复制代码
我就是用这个方法得到的..

用法一:在开始游戏之前临时建立一个Bitmap类的实例,调用该方法得到宽度。
代码:
text = Bitmap.new(1,1).text_size("新手村").width
p text
exit
临时建立一个宽1长1的Bitmap,调用方法。

用法二:在窗口里使用该方法。
代码:
def refresh
    self.contents.clear
    w = self.contents.text_size("新手村").width
    draw_text(0,0,w,22,"新手村")
end

用法三(重点):
在draw_text(x,y,width,height)后面,有
draw_text(rect, str[, align])

这里用到了Rect类(矩形),可以直接利用text_size获得矩形。
代码:
w = self.contents.text_size("新手村")
draw_text(w,"新手村")

好了,上面那些纯属非重点,重点从这里开始 = =

既然“新手村”是不会变的,那么为什么要反复描绘呢?
我们现在就要让它“变”起来,我们要将“新手村”换成当前队伍里一号角色的名字
首先介绍一个非常有用的东西,内嵌表达式
在F1帮助里也有,就是可以在字符串里以“#{变量名}”的方式代入变量。
于是可以得到下面的东西。
  1. def refresh
  2.     self.contents.clear
  3.     @name = $game_party.actors[0].name # 变量@name代入一号角色名字
  4.     self.contents.draw_text(0,0,text_size(@name).width,text_size(@name).height,"#{@name}")
  5. end
复制代码
好了,本章结束 = = 由于本章未经测试,可能有误,欢迎批评指正!我会塞最大的糖表示感谢(虽然只有30)!

评分

参与人数 1梦石 +1 收起 理由
怪蜀黍 + 1 发布奖励

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

29
 楼主| 发表于 2014-2-2 09:29:41 | 只看该作者
第十章  如何创建一个窗口4

这次来说说如何在窗口中显示图标什么的。
rect
取得位图的矩形(Rect)。

blt(x, y, src_bitmap, src_rect[, opacity])
传送 src_bitmap 的矩形 src_rect(Rect)到该位图的座标(x,y)。

opacity 指定其不透明度,范围为 0 ~ 255。

这是F1帮助手册里的内容。我来简单解释一下,为什么要有个“矩形”。
比如说,一张标题图片是640*480,而矩形就是它的显示范围,如果矩形是120*120,那就只会显示120*120的图片。

上一次不是显示了个角色姓名吗?这一次就加一个图标。
self.contents.blt(66,0,Bitmap.new("001-Weapon01"),Rect.new(0,0,24,24))
我们来解释一下。
66是X坐标,0是Y坐标,Bitmap.new就是一个实例,显示图片,Rect.new是矩形的实例,从图标的x0,y0位置也就是左上角开始,截取24*24的像素。

大家运行一下试试看吧。

评分

参与人数 1星屑 +50 收起 理由
怪蜀黍 + 50 发布奖励

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

30
 楼主| 发表于 2014-2-2 09:39:02 | 只看该作者
本帖最后由 天地有正气 于 2014-2-2 11:13 编辑

第十一章  如何创建一个窗口5

这一节主要说一下血条的绘制。Bitmap类里面有一个方法,是专门用来填充颜色的。
fill_rect(x, y, width, height, color)
fill_rect(rect, color)
以 color(Color)颜色填充该位图的矩形(x,y,width,height)或 rect(Rect)。


我们把refresh方法中,除了self.contents.clear之外的内容都删光,开始编写血条。
编写之前,有必要了解一下血条的宽度是怎么算出来的,下面这句我认为是最好的写法,简介明了。
w = self.width * $game_party.actors[0].hp / [$game_party.actors[0].maxhp,1].max

然后,开始用fill_rect编写一个血条。
两种方法:
1.self.contents.fill_rect(0,0,w,20,Color.new(255,0,0,220))。
2.self.contents.fill_rect(Rect.new(0,0,w,20),Color.new(255,0,0,220))

至于边框,也是用fill_rect描绘,注意一条边一条边的描绘。

评分

参与人数 1星屑 +50 收起 理由
怪蜀黍 + 50 发布奖励

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 06:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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